比较Python中的两个列表(几乎相同)

时间:2013-06-28 19:05:10

标签: python sortedlist

我在示例中有两个包含值的列表:

List 1 = TK123,TK221,TK132 

List 2 = TK123A,TK1124B,TK221L,TK132P

我想要做的是获取另一个数组,其中包含列表1和列表2之间匹配的所有值,然后输出不匹配的值。

就我的目的而言,“TK123”和“TK123A”被认为是匹配的。所以,从上面的列表中,我只得到TK1124B

我并不特别关心速度,因为我计划一次运行此程序并完成它。

3 个答案:

答案 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']