1

我需要检查带有列表的列表是否包含与指定列表具有相似值的列表,值的顺序可能不同,但如果所有值都相同,则应返回 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"]具有相同的值

4

5 回答 5

0
def checker(list_of_lists, example):
    for i in list_of_lists:
        if tuple(sorted(i)) == tuple(sorted(example)):
            return True
    return False
于 2013-11-25T19:23:54.280 回答
0

对于您的特定问题, Python是一个更好的实现。

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

使用:

set(a) == set(b)

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

于 2013-11-25T19:13:39.777 回答
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)andset(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)
于 2013-11-25T19:10:53.440 回答
0

没有for循环的不同比较方法:

found = any(set(a)==set(l) for l in e)
于 2013-11-25T19:17:23.560 回答
0

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

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

例如,如果您有:

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

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

于 2013-11-25T19:10:00.360 回答