我在示例中有两个包含值的列表:
List 1 = TK123,TK221,TK132
和
List 2 = TK123A,TK1124B,TK221L,TK132P
我想要做的是获取另一个数组,其中包含列表 1 和列表 2 之间匹配的所有值,然后输出不匹配的值。
出于我的目的,“TK123”和“TK123A”被认为是匹配的。所以,从上面的列表中,我只会得到TK1124B
.
我并不特别关心速度,因为我计划运行这个程序一次并完成它。
我在示例中有两个包含值的列表:
List 1 = TK123,TK221,TK132
和
List 2 = TK123A,TK1124B,TK221L,TK132P
我想要做的是获取另一个数组,其中包含列表 1 和列表 2 之间匹配的所有值,然后输出不匹配的值。
出于我的目的,“TK123”和“TK123A”被认为是匹配的。所以,从上面的列表中,我只会得到TK1124B
.
我并不特别关心速度,因为我计划运行这个程序一次并完成它。
>>> 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']
为了:
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']
这会将列表中的每个项目与另一个列表中的每个项目进行比较。如果两者都有字母(例如 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']