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:不要对变量名使用关键字。列表理解主要用于创建列表。你没那么做,明白了。非常感谢。