列表与另一个列表进行比较

时间:2013-11-25 19:06:44

标签: python list comparison list-comparison

我需要检查列表中的列表是否包含与指定列表具有相似值的列表,值可能顺序不同但是如果所有值都相同则应该返回true

a= ["1","2","3","4","5"]

b= ["2","3","6","4","7"]

e = (["1","3","2","4","5"],["2","3","6","4","7"])


CombinationFound = []
for i in e:
    if i == a:
        CombinationFound = True
        break;
    else:
        CombinationFound = False

它应该返回true,因为["1","2","3","4","5"]["1","3","2","4","5"]具有相同的值

5 个答案:

答案 0 :(得分:0)

尝试将这些列表转换为集合:

def isthesame(a,b):
    return set(b) == set(a)

例如,如果你有:

a= ["1","2","3","4","5"]
b= ["2","3","6","4","7"]

此解决方案适用于没有重复项的列表。

答案 1 :(得分:0)

您需要将您尝试匹配的列表转换为您可以比较的内容,而无需关心原始订单。如果列表元素的出现次数计数,请使用排序列表。如果没有,请使用集合。

list_to_match = sorted(a)
combination_found = False
for i in e:
    if sorted(i) == list_to_match:
        combination_found = True
        break

该版本将区分具有不同重复元素数量的列表 - 即[0, 1, 1, 2][0, 1, 1, 1, 2]不匹配。如果您不关心这种可能性,请改用set(a)set(i)

set_to_match = set(a)
combination_found = False
for i in e:
   if set(i) == set_to_match:
       combination_found = True
       break

或者,对于更简洁的版本,使用带有生成器表达式的内置any函数:

list_to_match = sorted(a)
combination_found = any(sorted(i) == list_to_match for i in e)

答案 2 :(得分:0)

Python sets是针对您的特定问题的更好的实现。

集合是包含数据的数学对象,但具有确定两个集合之间的联合,交叉,差异等的方法。

使用:

set(a) == set(b)

应该给你想要的结果。只要“相似”,你的意思是“相同”。

答案 3 :(得分:0)

不使用for循环进行比较的不同方式:

found = any(set(a)==set(l) for l in e)

答案 4 :(得分:0)

def checker(list_of_lists, example):
    for i in list_of_lists:
        if tuple(sorted(i)) == tuple(sorted(example)):
            return True
    return False
相关问题