两个列表的不区分大小写的比较
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}
然后使用 set
s 的交集:
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.")
我有 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}
然后使用 set
s 的交集:
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.")