Pythonic 从一个列表弹出到另一个列表

我有两个清单


a = [1,2,3]

b = []

如果满足特定条件,我想从列表 a 中移动一个元素。


a = [1,3]

b = [2]

下面的代码显示了一个示例,但是,我想在单个循环内执行此操作。我如何更有效地做到这一点?


a = [1,2,3]

b = []

pop_list = []

for i in range(len(a)):

    if a[i] == 2:

        print("pop:", a[i])

        pop_list.append(i)


for i in range(len(pop_list)):

    b.append(a.pop(pop_list[i]))

# Reset pop_list

pop_list=[]

理想情况下,我不会生成新列表 b。


MMMHUHU
浏览 154回答 4
4回答

扬帆大鱼

一对列表推导式即可完成这项工作:一个用于选择 所需的元素b,另一个用于从中删除它们ab = [i for i in a if i == 2]a = [i for i in a if i != 2]

慕容森

您可以对filter两者itertools.filterfalse使用相同的过滤函数:from itertools import filterfalsea = [1,2,3]b = []list(filterfalse(lambda x: x == 2, a))list(filter     (lambda x: x == 2, a))[1, 3][2]

宝慕林4294392

如果该元素x存在,您可以将其从 中删除b并将其附加到a.a = [1, 2, 3]b = []x = 2def remove_append(a, b, x):    if x in a:        a.remove(x)        b.append(x)remove_append(a, b, x)print(a)print(b)输出:[1, 3][2]

慕尼黑8549860

我们必须遍历所有元素,但是,您可以应用此技巧在一个循环中添加到适当的列表:(追加到循环比删除任意位置的元素更有效)a = [1,2,3]condition_false, condition_true = [], []for v in a:    # Add to the right list    (condition_false, condition_true)[v == 2].append(v)# [1, 3]print(condition_false)# [2]print(condition_true)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python