我在示例中有两个包含值的列表:
List 1 = TK123,TK221,TK132
和
List 2 = TK123A,TK1124B,TK221L,TK132P
我想要做的是获取另一个数组,其中包含列表1和列表2之间匹配的所有值,然后输出不匹配的值。
就我的目的而言,“TK123”和“TK123A”被认为是匹配的。所以,从上面的列表中,我只得到TK1124B
。
我并不特别关心速度,因为我计划一次运行此程序并完成它。
答案 0 :(得分:2)
>>> list1 = 'TK123','TK221','TK132'
>>> list2 = 'TK123A','TK1124B','TK221L','TK132P'
>>> def remove_trailing_letter(s):
... return s[:-1] if s[-1].isalpha() else s
...
>>> diff = set(map(remove_trailing_letter, list2)).difference(list1)
>>> diff
set(['TK1124'])
你可以添加最后一个字母,
>>> add_last_letter_back = {remove_trailing_letter(ele):ele for ele in list2}
>>> diff = [add_last_letter_back[ele] for ele in diff]
>>> diff
['TK1124B']
答案 1 :(得分:1)
有关:
list_1 = ['TK123', 'TK221', 'TK132']
list_2 = ['TK123A', 'TK1124B', 'TK221L', 'TK132P']
以下两个片段中的任何一个都会产生两个列表之间的公共项目列表:
list(set(list_1).intersection(list_2))
# returns []
list(set(list_1) & set(list_2))
# returns []
获取独家物品清单:
list(set(list_1) ^ set(list_2))
# returns ['TK1124B', 'TK132P', 'TK123A', 'TK221', 'TK221L', 'TK132', 'TK123']
如果要对结果列表进行排序,请使用sorted
方法:
exclusive = list(set(list_1) ^ set(list_2))
sorted(exclusive)
# returns ['TK1124B', 'TK123', 'TK123A', 'TK132', 'TK132P', 'TK221', 'TK221L']
答案 2 :(得分:1)
这会将列表中的每个项目与另一个列表中的每个项目进行比较。如果两者都有字母(例如TK132C和TK132P不匹配),则不起作用。如果这是一个问题,请在下面发表评论。
list_1 = ['TK123','TK221','TK132']
list_2 = ['TK123A','TK1124B','TK221L','TK132P']
ans = []
for itm1 in list_1:
for itm2 in list_2:
if itm1 in itm2:
break
if itm2 in itm1:
break
else:
ans.append(itm1)
for itm2 in list_2:
for itm1 in list_1:
if itm1 in itm2:
break
if itm2 in itm1:
break
else:
ans.append(itm2)
print ans
>>> ['TK1124B']