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

时间:2019-01-05 23:44:28

标签: 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]
    sum = 0
    res = [sum if i == 13 else sum += i for i in ip]
    return sum

3 个答案:

答案 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个会议时,使用内置的sumitertools.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(不过很快就会弃用)。

请不要使用此