根据条件从列表中删除元素

时间:2019-07-17 06:08:09

标签: python python-3.x

我需要根据另一个列表中的条件(如果满足)从一个列表中删除一个元素(在这种情况下为元组)。

我有2个列表(元组列表)。

List1 = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]


List2 = [(1, 2), (1, 3), (1, 2), (2, 3), (2, 2), (3, 2)]

List1基本上是根据以下代码计算的。

import pandas as pd    
mapping = {'name': ['a', 'b', 'c', 'd'],'ID': [1,2,3,2]} 
df = pd.DataFrame(mapping)
comb = df['name'].to_list()
List1 = list(combinations(comb,2))

# mapping the elements of the list to an 'ID' from the dataframe and creating a list based on the following code
List2 = [(df['ID'].loc[df.name == x].item(), df['ID'].loc[df.name == y].item()) for (x, y) in List1]

现在我需要在这里申请条件;查看List2,我需要查看List2中的所有元组,并查看其中是否有具有相同“ ID”的元组。例如,在List2中,我看到有(2,2)。因此,我想基于此返回到List1,删除产生这对(2,2)对的相应元组。

基本上,我的最终修订清单应该是:

RevisedList = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('c', 'd')]

('b','d')应该删除,因为它们在集合中产生(2,2)个相同的ID

1 个答案:

答案 0 :(得分:1)

List1 = [('a','b'), ('a','c'), ('a','d'), ('b','c'), ('b','d')]
List2 = [(1,2), (1,3), (1,2), (2,3), (2,2)]
new_List1 = [elem for index,elem in enumerate(List1) if List2[index][0]!=List2[index][1]]
// Result: [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c')]

这还不是很清楚,但这是您要寻找的吗? new_List1仅包含那些索引,其中该索引List2在元组中具有两个不同的数字