当两个列表匹配python时返回空集

时间:2015-10-30 10:14:08

标签: python

my_list = [['mango', 'apple', 'mango'], ['papaya', 'orange'], ['berry', ' berry'], ['watermelon', 'banana']]

因此,如果子列表包含两个相同的变量,则将其缩减为空列表。所以输出应该是

my_list = [[], ['papaya', 'orange'], [], ['watermelon', 'banana']] 

期望的输出

my_list = [['papaya', 'orange'], ['watermelon', 'banana']]

所以浆果是一个相同的变量被简化为空集。芒果也是如此。

i = 0
j = 0
for x in my_list[i]:
   for y in my_list[j]:
      if x == not x:
         list[i][j].pop()
      else:
         continue
print my_list

可以使用列表理解来完成吗?

添加到我的问题:

my_list = [['not mango', 'apple', 'mango'], ['not papaya', 'orange'], ['berry', 'not berry'],['watermelon', 'banana']

输出:

my_list = [['not papaya, orange'], ['watermelon', 'banana']]

5 个答案:

答案 0 :(得分:1)

您可以将列表推导与三元运算符一起使用,将子列表的大小与从该子列表创建的集合的大小进行比较。

>>> [lst for lst in my_list if len(lst) == len(set(lst))]
[['papaya', 'orange'], ['watermelon', 'banana']]

或者使用条件列表理解,以防您想要完全删除这些列表(从您的问题中找不到您想要的内容)。

"x"

关于您修改过的问题:如果您想检查列表中是否还有"not x"any,则不能仅仅比较尺寸,而必须使用>>> my_list = [['mango', 'apple', 'not mango'], ['not papaya', 'orange'], ['berry', 'not berry'], ['watermelon', 'banana']] >>> [lst if not any("not " + x in lst for x in lst) else [] for lst in my_list] [[], ['not papaya', 'orange'], [], ['watermelon', 'banana']] :< / p>

bootRepackage {
    withJarTask jar
}

如果您想完全删除列表,只需将条件放在后面,如上所述。

答案 1 :(得分:0)

my_list = [ ["mango","apple","mango"],["papaya","orange"],["berry","berry"],["watermelon","banana"] ]
print [i for i in my_list if len(i)==len(set(i))]

输出:

[['papaya', 'orange'], ['watermelon', 'banana']] 

使用空列表:

my_list = [ ["mango","apple","mango"],["papaya","orange"],["berry","berry"],["watermelon","banana"] ]
print [i if len(i)==len(set(i)) else [] for i in my_list]

输出继电器:

[[], ['papaya', 'orange'], [], ['watermelon', 'banana']]

答案 2 :(得分:0)

my_list = [['mango','apple','mango'],['papaya','orange'],['berry','berry'],['watermelon','banana']]
print [i for i in my_list if not any(i.count(j)>1 for j in i)]

输出:[['papaya', 'orange'], ['watermelon', 'banana']]

您可以在此处使用any查看是否有任何元素重复出现。

如果要使用空列表

my_list = [['mango','apple','mango'],['papaya','orange'],['berry','berry'],['watermelon','banana']]
print [i if not any(i.count(j)>1 for j in i) else [] for i in my_list ]

输出:[[], ['papaya', 'orange'], [], ['watermelon', 'banana']]

答案 3 :(得分:0)

使用setset包含唯一元素。所以,想法是检查长度 长度为set的{​​{1}}。如果两者不相同。然后存在重复元素,否则不存在。

list

答案 4 :(得分:0)

my_list = [['mango','apple','mango'],['papaya','orange'],['berry','berry'],['watermelon','banana']]


from collections import Counter

my_list = [ []  if max(Counter(x).values()) > 1 else x for x in my_list]

pp(my_list)

[[], ['papaya', 'orange'], [], ['watermelon', 'banana']]