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