1

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

List 1 = TK123,TK221,TK132 

List 2 = TK123A,TK1124B,TK221L,TK132P

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

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

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

4

3 回答 3

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']
于 2013-06-28T19:10:22.147 回答
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']
于 2013-06-28T19:08:14.137 回答
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']
于 2013-06-28T19:17:49.040 回答