我有两个A和B列表。当我在A中找到一个B值时,我想删除A中的值。但是在python中没有“ redo”,这会引起问题。可能会有各种各样的编码,但是我想知道一种非常聪明,简单或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)
返回['Jan','Mar','May','Jun']
由于A.remove()方法在A中删除了“ Feb”之后,“ Mar”被跳过了。
由于有多种解决方案,因此我需要进一步说明我的情况。基本上我想保留A,因为A是带有长列表元素的引用。然后,在循环多个B的过程中,我想从A中删除B中的那些元素。因此,我需要保留A直到程序结束,然后删除属于任何B的元素。
答案 0 :(得分:3)
您可以使用列表理解:
[item for item in A if item not in B]
答案 1 :(得分:2)
重复列出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:在列表B中将其“ Feb”(索引1)从列表A中删除,在删除项目后,在索引1中现在将具有“ Mar”,但是继续进行迭代的索引是2,因为它“跳过”“ Mar”
答案 2 :(得分:1)
使用set.difference
例如:
A = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
B = ['Feb', 'Mar', 'Apr']
print(list(set(A).difference(set(B))))
输出:
['Jan', 'May', 'Jun']
答案 3 :(得分:0)
此问题在多个列表中的概括,以获取常见元素的列表:
l = [['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], ['Feb', 'Mar', 'Apr'], ['Feb', 'Mar', 'Apr', 'Dec']]
list(set.intersection(*map(set, l)))
输出:
['Feb', 'Apr', 'Mar']