如果多个列表是唯一的条件

时间:2018-10-23 23:13:22

标签: python conditional-statements

我尝试寻找答案,但找不到正确的答案。 所以说我有这个:

list=['f','f','f','f','r','r','r','r','b','b','b','b','l','l','l','l','t','t','t','t',
      'u','u','u','u']
c1=[list[0],list[13],list[18]]
c2=[list[1],list[4],list[19]]
c3=[list[5],list[8],list[17]]
c4=[list[9],list[12],list[16]]

#if c1,c2,c3,c4 are unique
#do something

如何比较这四个列表是唯一的?

4 个答案:

答案 0 :(得分:0)

如果通过 unique 来表示在每个位置中都不包含相同的值,那么类似的方法应该起作用:

if len(set(map(tuple, [c1, c2, c3, c4]))) == 4:
  # All four lists are unique

请注意,在这种情况下,[1,2][2,1]是不同的。如果出于您的目的,这些目标是相同的,那么您会希望这样做:

if len(set(map(frozenset, [c1, c2, c3, c4]))) == 4:
  # All four lists are unique

如果您需要 unique 的其他定义,则需要更清楚地询问您的要求。

答案 1 :(得分:0)

由于顺序无关紧要,您可能需要对子列表进行排序,然后检查其中一组是否与原始排序列表的长度相同:

ordered = [tuple(sorted(l)) for l in [c1, c2, c3, c4]]
# [('f', 'l', 't'), ('f', 'r', 't'), ('b', 'r', 't'), ('b', 'l', 't')]

unique = len(set(ordered)) == len(ordered)
# True 

答案 2 :(得分:-1)

if max(len(c1), len(c2)) != len(set(c1) & set(c2))\
        and max(len(c1), len(c3)) != len(set(c1) & set(c3))\
        and max(len(c1), len(c4)) != len(set(c1) & set(c4))\
        and max(len(c2), len(c3)) != len(set(c2) & set(c3))\
        and max(len(c3), len(c4)) != len(set(c3) & set(c4)):
    print("Do something.")
else:
    print("Do something else.")

答案 3 :(得分:-1)

我通常不喜欢轮船,但我认为这应该可行:

if (tuple(c1) != tuple(c2) != tuple(c3) != tuple(c4)):
    print 'All are unique!'
else:
    raise 'Oh no, they are not all unique!'