我有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
但它没有按预期工作。
答案 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.")
希望对大家有所帮助!