为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2023-08-15 16:35:39
我有两个清单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_listpop_list=[]理想情况下,我不会生成新列表 b。
查看完整描述

4 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

一对列表推导式即可完成这项工作:一个用于选择 所需的元素b,另一个用于从中删除它们a


b = [i for i in a if i == 2]

a = [i for i in a if i != 2]


查看完整回答
反对 回复 2023-08-15
?
慕容森

TA贡献1853条经验 获得超18个赞

您可以对filter两者itertools.filterfalse使用相同的过滤函数:


from itertools import filterfalse


a = [1,2,3]

b = []


list(filterfalse(lambda x: x == 2, a))

list(filter     (lambda x: x == 2, a))

[1, 3]

[2]



查看完整回答
反对 回复 2023-08-15
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果该元素x存在,您可以将其从 中删除b并将其附加到a.


a = [1, 2, 3]

b = []

x = 2


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


查看完整回答
反对 回复 2023-08-15
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我们必须遍历所有元素,但是,您可以应用此技巧在一个循环中添加到适当的列表:


(追加到循环比删除任意位置的元素更有效)



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)


查看完整回答
反对 回复 2023-08-15
  • 4 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信