[英]How to write following code in list comprehension form?
嘗試在列表推導形式中轉換以下代碼,但我在“+ =”附近的語法錯誤
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
(盡管很快就會被棄用)。
請不要使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.