如何使用列表推导在两个不同的列表中添加If和Else的值?

时间:2015-10-26 06:37:46

标签: python 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和else'的输出值条件必须保存在两个不同的列表中。

5 个答案:

答案 0 :(得分:2)

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

True

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

答案 1 :(得分:2)

$ sed -n -e '/456/,/ddd/{/ddd/!{s/a/A/g;s/o/Q/g};p}'  f2
123-fQQ-456
Abc-xx
fQQ-yy
ddd-ao

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

执行此操作

答案 2 :(得分:1)

认为这是@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]

答案 3 :(得分:1)

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

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

范围(开始,停止[,步骤])

     

这是一个多功能函数,用于创建包含算术进度的列表。它最常用于for循环

答案 4 :(得分:0)

几乎没有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;如果是偶数,则第二项是数字,否则为无。

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

过滤掉它们