列表检查python

时间:2010-12-07 07:56:07

标签: python list

你好 我写了一个小函数,它带有两个列表,并将它们作为复制对进行比较, 并返回一个布尔值。

例如([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。

非常感谢任何提示和想法

3 个答案:

答案 0 :(得分:3)

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])

答案 1 :(得分:3)

def dupLists(List0,*Lists):
    result=set(List0)
    for l in Lists:
        result=result.intersection(l)
        if len(result)<2:
            return True
    return False

答案 2 :(得分:1)

作为一个天真的实现,您可以定义列表列表并散列内部表示。例如:

def check(given):
   hash = {}
   for li in given:
      for val in li:
         if val in hash:
            return False
         hash[val] = 1
   return True

如果输入数据集包含相对于内存的少量唯一元素,则此方法有效。如果您希望收到极大的数据集,则可能需要考虑更复杂的方法。

另外值得注意的是,这将为同一数据集中的重复元素返回False,并在数据集内的任何位置重复值。这很难重构,或完全重写为此处列出的其他解决方案。