簡體   English   中英

如何在列表理解形式中編寫以下代碼?

[英]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

在這里使用列表理解是不可能的,因為你要分配一些東西(這種情況是+= ,但仍然有= ),所以你必須保持循環,列表理解不是可以用於的東西任何東西。

所以保持循環。

列表理解在這里不適用,但這並不意味着我們不能使用功能編程。

使用內置sumitertools.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM