首页 > 解决方案 > 如何在python中分别删除两个列表中的匹配值?

问题描述

我的 for 循环在列表方面遇到问题。我有两个列表,如下所示。现在,如果两个列表中的名称匹配,我想删除该名称。我的代码

Input:
 col = ['cat','dog','bird','fish']
col_names= [cat,bird]
r=[]
for i in col:
    print(i)
    if i in col_names: col_names.remove(i)
    r.append(col_names)
print(r)

然后我得到这样的输出

r = [['dog','fish']] [['dog','fish']]

我想要的是:

r =['dog','bird','fish'] ['cat','dog','fish']

标签: pythonlistdataframefor-loop

解决方案


实现这一点的更简单方法是使用嵌套列表理解

>>> col = ['cat','dog','bird','fish']
>>> col_names= ['cat', 'bird']

>>> [[c for c in col if c !=cn] for cn in col_names]
[['dog', 'bird', 'fish'], ['cat', 'dog', 'fish']]

您共享的代码在逻辑上不正确。如果你想用显式for循环来做,你可以这样写:

new_list = []
for cn in col_names:
    temp_list = []
    for c in col:
        if c != cn:
            temp_list.append(c)
    new_list.append(temp_list)

print(new_list)

推荐阅读