Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何以列表理解形式编写以下代码?_Python_List Comprehension - Fatal编程技术网

Python 如何以列表理解形式编写以下代码?

Python 如何以列表理解形式编写以下代码?,python,list-comprehension,Python,List Comprehension,试图以列表理解形式转换以下代码,但我在其他位置附近得到“+=”的语法错误 def lucky_sum(a, b, c): ip = [a, b, c] sum = 0 for i in ip: if i ==13: return sum else: sum+=i return sum 我试过这个: def lucky_sum(a, b, c): ip = [a, b, c]

试图以列表理解形式转换以下代码,但我在其他位置附近得到“+=”的语法错误

def lucky_sum(a, b, c):
    ip = [a, b, c]
    sum = 0
    for i in ip:
        if i ==13:
            return sum
        else:
            sum+=i
    return sum
我试过这个:

def lucky_sum(a, b, c):
    ip = [a, b, c]
    sum = 0
    res = [sum if i == 13 else sum += i for i in ip]
    return sum

在这里不可能使用列表理解,因为您正在分配某些内容(本例为
+=
,但其中仍然包含
=
),所以您必须保持循环,列表理解不能用于任何事情


所以,保持循环

列表理解在这里不适用,但这并不意味着我们不能使用函数编程

使用内置的
sum
itertools.takewhile
在会议13时结束迭代。创建一条直线

import itertools


def lucky_sum(a, b, c):
    return sum(itertools.takewhile(lambda x:x!=13,[a, b, c]))

print(lucky_sum(1,2,3))
print(lucky_sum(1,13,3))
打印
6
然后打印
1

可变数量的参数版本:

def lucky_sum(*ip):
    return sum(itertools.takewhile(lambda x:x!=13,ip))

首先:不要在这里做列表理解。它们存在,因此您可以更轻松地创建列表

只是为了看看是否可能(没有外部模块),我尝试并提出了以下建议:

def lucky_sum2(*args):
    return sum(el if el != 13 else next(iter([])) for el in args)
它滥用了这样一个事实,即
next(iter([])
引发了
StopIteration
(但很快就会被弃用)


请不要用这个

你不必用列表理解法。我想他们只是想用@KeithTip:不要对变量名使用关键字。列表理解主要用于创建列表。你没那么做,明白了。非常感谢。