尝试将以下代码转换为列表理解形式,但是我在“ + =”附近遇到语法错误
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
答案 0 :(得分:5)
在这里无法使用列表推导,因为您正在分配某些内容(本例为zips = {
'NY': {
"Bronx NY":[10453, 10457, 10460, 10451, 10474],
'Albany NY': [12084, 12201, 12202, 12203, 12204],
'Buffalo NY': [14201,14202, 14203, 14204, 14205],
},
}
location = random.choice(list(zips['NY'].keys()))
zip = random.choice(zips['NY'][location])
,但其中仍包含+=
),因此您必须循环使用列表推导不是可以用于任何东西的东西。
因此,请保持循环。
答案 1 :(得分:1)
列表理解此处未进行调整,但这并不意味着我们不能使用函数式编程。
在遇到第13个会议时,使用内置的sum
和itertools.takewhile
结束迭代。创建单线。
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))
答案 2 :(得分:1)
首先:不要在这里进行列表理解。它们存在,因此您可以更轻松地创建列表。
我只是想看看是否有可能(没有外部模块),我想出了这个办法:
def lucky_sum2(*args):
return sum(el if el != 13 else next(iter([])) for el in args)
它滥用了一个事实,即next(iter([]))
引发一个StopIteration
(不过很快就会弃用)。
请不要使用此