繁体   English   中英

使用列表理解使用 if else 条件切片列表

[英]slice list with if else condition using list comprehension

我希望列表中只有不是 1 [3,4,5] 的数字,并将 1 放入另一个列表中。 下面是我写的代码

a_list=[1,1,1,1,3,4,5]
one_list=[]
a_list[:] = [a if a != 1 else one_list.append(a) for a in a_list]
print(a_list)
print(one_list)

这是 a_list 的输出 - [None, None, None, None, 3, 4, 5]

我想要的 a_list 输出 - [3, 4, 5]

关于你问题的第一部分,正确的理解是:

[e for e in a_list if e != 1]

对于您想要做的事情,理解并不是真正正确的工具,请使用经典循环:

a_list=[1,1,1,1,3,4,5]

list1 = []
list2 = []
for e in a_list:
    if e == 1:
        list1.append(e)
    else:
        list2.append(e)     

输出:

>>> list1
[1, 1, 1, 1]

>>> list2
[3, 4, 5]

您想做什么以及为什么不应该:

你试图用理解来做的是:

a_list=[1,1,1,1,3,4,5]
one_list = []
a_list[:] = [e for e in a_list if (True if e != 1 else one_list.append(e))]
a_list, one_list

但是,您不应该这样做,因为它不会阻止创建临时列表,并且它不是明确的/pythonic。

奖励:使用 itertools
from itertools import tee, filterfalse

def partition(pred, iterable):
    "Use a predicate to partition entries into false entries and true entries"
    # partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
    t1, t2 = tee(iterable)
    return filterfalse(pred, t1), filter(pred, t2)

a_list=[1,1,1,1,3,4,5]
a_list, one_list = map(list, partition(lambda x: x == 1, a_list))

发生这种情况是因为list.append()in-place函数并返回None 你可以做你想做的如下:

就地操作是直接改变内容的操作。

a_list =[1,1,1,1,3,4,5]
one_list = [a for a in a_list if a==1]
a_list = [a for a in a_list if a!=1]
print(a_list)
print(one_list)

输出:

[3, 4, 5]
[1, 1, 1, 1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM