繁体   English   中英

python中的列表检查

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM