如何使用列表理解将 If 和 Else 的值添加到两个不同的列表中?

How can I add the values of If and Else in two different lists, using list comprehension?

even = []
odd = []
lst = []

for i in range(1, 21):
    lst.append(i)

求偶数或奇数

for i in lst:
    if i % 2 == 0:
        even.append(i)
    else:
        odd.append(i)

print(even, odd)

是否有任何使用列表理解的 pythonic 方法,其中 'if and else' 条件的输出值必须保存在两个不同的列表中。

对于简单的解决方案,您可以这样做:

odds = [i for i in range(1,21) if i % 2 == 0]
even = [i for i in range(1,21) if i % 2 != 0]

其他人提供了一些不错的内衬。

odd=[]
even=[]
[even.append(i) if i%2==0 else odd.append(i) for i in xrange(1,21)]

您可以使用 if else 执行此操作。

认为这就是@fourtheye 在他的评论中提到的..

>>> el,ol = filter(lambda x: x % 2 == 0, range(1, 21)),filter(lambda x: x % 2 != 0, range(1, 21))
>>> el
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
>>> ol
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

这是一个简单的解决方案。

>>> lst = range(1,21)
>>> odd = range(1,21,2)
>>> even = range(2,21,2)
>>> odd
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> even
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

range(start, stop[, step])

This is a versatile function to create lists containing arithmetic progressions. It is most often used in for loops

几乎没有 pythonic,而且很慢,但在涉及几个列表理解和 zip 的单个表达式中仍然可能。类似于:

odds, evens = [[y for y in x if y is not None] for x in zip(*[(x, None) if x % 2 else (None, x) for x in range(1, 21)])]

分解……我们构造一个元组列表,其中第一项是奇数,否则 None;如果第二项是偶数,则第二项是数字,否则为 None。

[(x, None) if x % 2 else (None, x) for x in range(1, 21)]

我们将其解压缩到两个赔率和赔率列表中......不幸的是它也包含所有 Nones

zip(*[(x, None) if x % 2 else (None, x) for x in range(1, 21)])

所以我们用 [y for y in x if y is not None]

过滤掉它们