[英]list checking in python
您好,我编写了一个小函数,该函数接受两个列表,并比较它们是否重复,并返回布尔值。
例如,[[1,2,3],[2,1,4])返回false,而[[1,2,3],[3,4,5])返回true,但我希望该参数采用给定数量的列表,而不是两个。
到目前为止,这是我的程序:
def check(xrr, yrr):
x = xrr[:]
x.sort()
y = yrr[:]
y.sort()
for i in range(len(x)-1):
if x[i]==y[i]:
return False
return True
但是它也不能完全正确地工作,因为[[1,2,3],[1,4,5])也返回false。
任何提示和想法都受到高度赞赏
import itertools
def check(*args):
r = None
for l in args:
s = set(frozenset(x) for x in itertools.combinations(l, 2))
if r is None:
r = s
else:
r &= s
if not r:
return True
return False
print check([1, 2, 3], [3, 4, 5])
print check([1, 2, 3], [2, 1, 4])
def dupLists(List0,*Lists):
result=set(List0)
for l in Lists:
result=result.intersection(l)
if len(result)<2:
return True
return False
作为一个简单的实现,您可以定义一个列表列表并哈希内部表示。 例如:
def check(given):
hash = {}
for li in given:
for val in li:
if val in hash:
return False
hash[val] = 1
return True
如果您的输入数据集包含相对于内存的少量唯一元素,则此方法有效。 如果希望接收到非常大的数据集,则可能需要考虑一种更复杂的方法。
同样值得注意的是,对于同一数据集中的重复元素,以及在数据集中任何位置的重复值,这将返回False
。 重构,或完全重写为此处列出的其他解决方案,这都是微不足道的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.