两个列表的不区分大小写的比较

Case-insensitive comparison of two lists

我有 2 个列表。第一个是 list_A = ['Sasi', 'Babu', 'kuttapppan', 'mathayi'],我的第二个列表是 list_B = ['Raman', 'Kesavan', 'sasi', 'unni', 'Kuttappan']

我想比较这两个列表并识别第二个列表中重复的值,无论它是以大写字母还是小写字母开头。我尝试了以下方法:

if not [name for name in list_A if name in list_B]:
     print name

但它没有按预期工作。

尝试使用集合。差异集操作将 return 个唯一元素设置为以下示例中的 abc。可以使用交集运算得到公共元素

abc = [i.lower() for i in ["a","b","c"]]
bcd = [i.lower() for i in ["b","c","d"]]

print set(abc).difference(set(bcd)) 
print set(abc).intersection(set(bcd)) 

首先,将每个list中的每个元素用lower()转换为小写。然后,比较重复项的最简单方法是使用 set 操作。您可以将这些步骤与 set 理解相结合:

list_A = ['Sasi', 'Babu', 'kuttapppan', 'mathayi']
list_B = ['Raman', 'Kesavan', 'sasi', 'unni', 'Kuttappan']
list_A = {item.lower() for item in list_A}
list_B = {item.lower() for item in list_B}

然后使用 sets 的交集:

copies = list_A & list_B
#Might be better if we are dealing with huge lists.  

list_A = ['Sasi', 'Babu', 'kuttapppan', 'mathayi']
list_B = ['Raman', 'Kesavan', 'sasi', 'unni', 'Kuttappan'].

d = [x.lower() for x in list_A] # make dict of list with less elements  
for m in list_B:  # search against bigger list  
    if m.lower() in d: print(m)   

实际上你可以在一个列表理解中做到这一点:

list_A = ['Sasi', 'Babu', 'kuttappan', 'mathayi']
list_B = ['Raman', 'Kesavan', 'sasi', 'unni', 'Kuttappan', 'SaSi']

duplicated = [b for b in list_B if b.lower() in (a.lower() for a in list_A)]
print(duplicated)

这样它 return 在比较小写的时候是原始值。使用集合将 return 小写值并将删除 list_B.

中的所有重复值

这是我的解决方案,对初学者来说更容易:

list_A = ['Sasi', 'Babu', 'kuttapppan', 'mathayi']
list_B = ['Raman', 'Kesavan', 'sasi', 'unni', 'Kuttappan']

for i in range(len(list_A)):
    if str(list_A[i][0]).lower() in str(list_B).lower():
        print(list_B[i] + " is duplicate.")