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

时间:2015-11-11 03:23:43

标签: python list comparison

我有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

但它没有按预期工作。

5 个答案:

答案 0 :(得分:2)

尝试使用套装。在以下示例中,差异集操作将返回设置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)) 

答案 1 :(得分:2)

首先,使用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}

然后使用set s:

的交集
copies = list_A & list_B

答案 2 :(得分:2)

#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)   

答案 3 :(得分:0)

实际上,您可以只通过一个列表就可以做到这一点:

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 (x.lower() for x in list_A)]
print(duplicated)

这样,在比较小写字母时,它将返回原始值。使用集合将返回小写的值,并将删除list_B中所有重复的值。

答案 4 :(得分:0)

我知道这是一个老问题,但我想做出贡献。我潜伏了很长时间,刚刚注册了。这是我的解决方案,我认为对初学者来说更容易:

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.")

希望对大家有所帮助!