Lambda表达式,列表作为参数

时间:2016-04-30 09:54:00

标签: python python-3.x lambda

我正在尝试在Python 3中编写if语句:

if n % 2 == 0:
    list.append(2)
elif n % 3 == 0:
    list.append(3)
elif n % 5 == 0:
    list.append(5)

有更多空间保守的做法吗? 我想过使用lambda表达式,但这些代码似乎不起作用。

if (lambda i: n % i == 0)(i in [2,3,5])
    list.append(i)

if (lambda i: n % i == 0)([2,3,5])
    list.append(i)

有没有办法使用lambda表达式?或者我需要一个不同的方法?另外,如果我使用lambda表达式,我是否可以使用条件匹配的i值(比如将它附加到列表中)?

4 个答案:

答案 0 :(得分:2)

>>> n = 33
>>> [i for i in (2, 3, 5) if n % i == 0]
[3]
>>> n = 10
>>> [i for i in (2, 3, 5) if n % i == 0]
[2, 5]

答案 1 :(得分:1)

要在问题中获得与if / elif / elif语句相同的结果:

your_list += next(([d] for d in [2, 3, 5] if n % d == 0), [])  

注意:只有第一个除数会附加到列表中。请参阅find first element in a sequence that matches a predicate

答案 2 :(得分:0)

我不能用lambda函数来做,但我认为这种方法有帮助你

list = [1,2,3] 
n = 9
[list.append(i) for i in (2,3,5) if n % i == 0]
print list
[1, 2, 3, 3]

依旧......

答案 3 :(得分:0)

与J.F. Sebastian的回答一样,这只给出了第一个除数:

res_list.extend([i for i in (2, 3, 5) if n % i == 0][:1])

[:1]只占用列表的第一个元素 如果列表为空,则给出一个空列表(因为一个空的片段 列表总是一个空列表。)

现在,extend()将单元素列表添加为单个元素 您的结果列表或零元素列表的任何内容。