如何按值删除列表的多个元素



我有两个A和B列表。当我在 A 中找到 B 的值时,我想删除 A 中的值。但是在python中没有"重做",它就会产生问题。可能有多种编码,但我想知道一种非常聪明或简单或pythonic的编码。

我需要"重做

",但 python 没有"重做"。

A = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
B = ['Feb', 'Mar', 'Apr']
for mon in A:
    if mon in B:
        A.remove(mon)
print(A)

返回 ["一月"、"三月"、"五月"、"六月"]

在删除 A 中的 'Feb' 后,由于 A.remove(( 方法,"Mar" 被跳过。

我需要更多地解释我的情况,因为有很多种解决方案。基本上我想保留 A,因为 A 是具有长列表元素的引用。然后,在许多 B 的循环中,我想从 A 中删除 B 中的这些元素。所以我需要保留 A 直到程序结束,删除属于任何 B 的元素。

您可以使用列表推导:

[item for item in A if item not in B]

遍历列表 B 中的项目:

A = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
B = ['Feb', 'Mar', 'Apr']
for item in B:
    if item in A:
        A.remove(item)
print (A)

输出:

['Jan', 'May', 'Jun']

注意:

代码中发生了什么,您正在循环访问列表中的项 您要从中删除项目。for 循环继续其 从它所在的索引进行迭代。但是如果您删除项目 从列表中,您已移动 IDX -1 的项目,因此其 "跳过"列表 A 中的某些项目

例:

1.iter:"Jan"(索引 0(它不在列表 B 中

2.iter:"Feb"(索引 1(它在列表 B 中,从列表 A 中删除"Feb",删除项目后,在索引 1 处,现在您将拥有"Mar",但继续迭代的索引是 2,因此它的"跳过"Mar"

使用 set.difference

前任:

A = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
B = ['Feb', 'Mar', 'Apr']
print(list(set(A).difference(set(B))))

输出:

['Jan', 'May', 'Jun']

这个问题在多个列表中的概括,以获得常见元素的列表:

l = [['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], ['Feb', 'Mar', 'Apr'], ['Feb', 'Mar', 'Apr', 'Dec']]
list(set.intersection(*map(set, l)))

输出:

['Feb', 'Apr', 'Mar']

相关内容

  • 没有找到相关文章

最新更新