首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个列表匹配python时返回空集

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

Stack Overflow用户
提问于 2015-10-30 10:14:07
回答 5查看 81关注 0票数 2
代码语言:javascript
复制
my_list = [['mango', 'apple', 'mango'], ['papaya', 'orange'], ['berry', ' berry'], ['watermelon', 'banana']]

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

代码语言:javascript
复制
my_list = [[], ['papaya', 'orange'], [], ['watermelon', 'banana']] 

期望输出

代码语言:javascript
复制
my_list = [['papaya', 'orange'], ['watermelon', 'banana']]

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

代码语言:javascript
复制
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

它能用列表理解来完成吗?

补充我的问题:

代码语言:javascript
复制
my_list = [['not mango', 'apple', 'mango'], ['not papaya', 'orange'], ['berry', 'not berry'],['watermelon', 'banana']

输出:

代码语言:javascript
复制
my_list = [['not papaya, orange'], ['watermelon', 'banana']]
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-10-30 10:21:26

可以在三元运算符中使用列表理解,将子列表的大小与从该子列表创建的集合大小进行比较。

代码语言:javascript
复制
>>> my_list = [['mango','apple','mango'],['papaya','orange'],['berry','berry'],['watermelon','banana']]
>>> [lst if len(lst) == len(set(lst)) else [] for lst in my_list]
[[], ['papaya', 'orange'], [], ['watermelon', 'banana']]

或者使用条件列表理解,以防您想要完全删除这些列表(从您的问题中不太清楚您想要什么)。

代码语言:javascript
复制
>>> [lst for lst in my_list if len(lst) == len(set(lst))]
[['papaya', 'orange'], ['watermelon', 'banana']]

关于您编辑的问题:如果您想检查是否有任何"x""not x"也在列表中,您不能仅仅比较大小,而必须使用any

代码语言:javascript
复制
>>> 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']]

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

票数 1
EN

Stack Overflow用户

发布于 2015-10-30 10:19:07

代码语言:javascript
复制
my_list = [ ["mango","apple","mango"],["papaya","orange"],["berry","berry"],["watermelon","banana"] ]
print [i for i in my_list if len(i)==len(set(i))]

输出:

代码语言:javascript
复制
[['papaya', 'orange'], ['watermelon', 'banana']] 

在空名单上:

代码语言:javascript
复制
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]

输出:

代码语言:javascript
复制
[[], ['papaya', 'orange'], [], ['watermelon', 'banana']]
票数 0
EN

Stack Overflow用户

发布于 2015-10-30 10:22:15

代码语言:javascript
复制
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查看是否重复任何元素。

如果您想要空列表,请使用

代码语言:javascript
复制
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']]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33433524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档