首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对子列表python中的元素进行比较?

如何对子列表python中的元素进行比较?
EN

Stack Overflow用户
提问于 2020-09-30 11:45:01
回答 1查看 76关注 0票数 1

如何在python中比较子列表中的元素?我想将索引1和索引2与其他列表进行比较。并且想要不匹配的子列表

代码语言:javascript
运行
复制
list1 =  [['10.100.10.37', 19331, '2020-9-28 6:38:10', 15, 16], ['10.100.10.37', 29331, '2020-9-28 6:38:10', 15 ,17]]
list2 = [ ['10.100.10.37', 19331, '2020-9-28 6:38:10', 15],['10.100.10.37', 19331, '2020-9-28 9:38:10', 15],['10.100.10.37', 21301, '2020-9-28 6:38:10', 15]]


new_items = []
for item in list2:
    if not any(x[1] == item[1] for x in list1):
       if not any(x[2] != item[2] for x in list1):       
           new_items.append(item)
   
print(new_items)

我得到的输出是(实际输出):

代码语言:javascript
运行
复制
[['10.100.10.37', 21301, '2020-9-28 6:38:10', 15]]

预期输出:

代码语言:javascript
运行
复制
[['10.100.10.37', 19331, '2020-9-28 9:38:10', 15], 
['10.100.10.37', 21301, '2020-9-28 6:38:10', 15]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 14:04:39

代码中的主要问题:嵌套的any函数调用不会做您想要的事情(代码不会将list1中每个列表的第一个和第二个索引与list2中的子列表的相应索引进行比较)

列表理解和any调用将完成此操作:

代码语言:javascript
运行
复制
new_items = [item for item in list2 if not any(item[1] == x[1] and item[2] == x[2] for x in list1)]

使用切片的版本(以防您需要增加连续检查的次数):

代码语言:javascript
运行
复制
new_items = [item for item in list2 if not any(item[1:3] == x[1:3] for x in list1)]

使用filter的替代版本(从问题中看更直接一些):

代码语言:javascript
运行
复制
tmp = [x[1:3] for x in list1]
new_items = list(filter(lambda x: not x[1:3] in tmp, list2))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64130536

复制
相关文章

相似问题

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