1
解决方案很可能对您很多人都是显而易见的,但我卡住了,所以我想我会问。匹配从一个列表到另一个列表中的元素,跳过已匹配的元素,Python
我有以下格式两个列表:
target_list =['apples 1', 'oranges 1', 'bananas 2', 'apples 3', 'oranges 2','mango 3', 'apples 2']
source_list = ['A apples', 'B mango', 'C apples', 'D bananas', 'E oranges','F apples', 'G oranges']
我需要通过每个target_items
的环路target_list
,并且如果target_item()[0]
匹配在source_list
的source_item()[1]
,return target_item()[0],source_item()[0], target_item()[1]
。重要的是在输出中不会重复source_item/target_item对,这是我的意思。假设我用一个普通的旧的for循环:
for target_item in target_list:
for source_item in source_list:
if source_item.split()[1] == target_item.split()[0]:
print target_item.split()[0], source_item.split()[0], target_item.split()[1]
的(不正确)的输出我得到的是:
apples A 1
apples C 1
apples F 1
oranges E 1
oranges G 1
bananas D 2
apples A 3
apples C 3
apples F 3
oranges E 2
oranges G 2
mango B 3
apples A 2
apples C 2
apples F 2
注意,源/目标对苹果,苹果C,苹果F被重复每次使用不同的号码3次。橙子对也是如此。我需要的是
apples A 1
apples C 2
apples F 3
oranges E 1
oranges G 2
bananas D 2
mango B 3
即,每个条目应始终有不同的来源和目标。
此外,对于'apple $ LETTER'和'orange $ LETTER'对的每一组,如果数字标签排列不同,并不重要。所以,下面是同样出色的输出:
apples A 2
apples C 1
apples F 3
oranges E 2
oranges G 1
bananas D 2
mango B 3
很不错的。谢谢! – Renklauf