【问题标题】:Case-insensitive comparison of two lists两个列表的不区分大小写比较
【发布时间】:2015-11-11 03:23:42
【问题描述】:

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

但它没有按预期工作。

【问题讨论】:

    标签: python list comparison


    【解决方案1】:

    实际上,您只需一个列表即可完成此操作:

    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)
    

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

    【讨论】:

    • 第一个问题:你确定list_a中的'Sasi'指的是list_b中的同一个'sasi'吗?第二个问题:如果你认识两个叫“Sasi”的朋友怎么办?该名称不是唯一标识符。
    【解决方案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】:

      尝试使用集合。在以下示例中,差异集操作将返回唯一元素以设置 abc。公共元素可以通过交集运算得到 ​​p>

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

      【讨论】:

        【解决方案4】:

        首先,使用lower() 将每个list 中的每个元素转换为小写。然后,比较重复项的最简单方法是使用 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
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多