Python嵌套列表提取问题:按条件筛选指定层级首元素
Python新手:带条件筛选的嵌套元组元素提取
嘿,作为Python新手能想到用列表推导和zip来处理嵌套结构,已经超棒啦!咱们一步步来解决这个带条件筛选的问题~
需求回顾
我们有一个嵌套元组列表:
list1 = [(('A', 'B'), ('C', 'D')), (('E', 'F'), ('G', 'H'))]
需要:
- 只保留**外层元组中,第一个子元组的第二个元素是'B',且第二个子元组的第二个元素是'D'**的项
- 从符合条件的项中提取最底层元组的首元素,组成新的元组列表,最终得到
[('A', 'C')]
分步解决方案
1. 先筛选符合条件的外层元素
我们可以用列表推导先把满足条件的项挑出来:
list1 = [(('A', 'B'), ('C', 'D')), (('E', 'F'), ('G', 'H'))] # 筛选:第一个子元组的第二个元素是'B',且第二个子元组的第二个元素是'D' filtered_items = [item for item in list1 if item[0][1] == 'B' and item[1][1] == 'D']
这里的索引对应关系:
item是外层的每个元组(比如(('A','B'),('C','D')))item[0]是外层元组的第一个子元组(('A','B')),item[0][1]就是这个子元组的第二个元素'B'item[1]是外层元组的第二个子元组(('C','D')),item[1][1]就是这个子元组的第二个元素'D'
运行后filtered_items的值是[(('A', 'B'), ('C', 'D'))],只有符合条件的项被保留了。
2. 提取目标元素组成结果列表
接着从筛选后的项里提取我们需要的首元素:
result = [(item[0][0], item[1][0]) for item in filtered_items]
这里item[0][0]是第一个子元组的首元素'A',item[1][0]是第二个子元组的首元素'C',最终result就是[('A', 'C')]。
一步到位的简洁写法
我们可以把筛选和提取合并成一个列表推导,更高效:
list1 = [(('A', 'B'), ('C', 'D')), (('E', 'F'), ('G', 'H'))] result = [(item[0][0], item[1][0]) for item in list1 if item[0][1] == 'B' and item[1][1] == 'D']
运行这段代码,直接就能得到想要的[('A', 'C')]。
测试验证
如果你把这段代码跑一遍,输出会是:
print(result) # 输出: [('A', 'C')]
完全符合你的需求哦~
内容的提问来源于stack exchange,提问作者Gavrk
相关产品推荐
相关产品推荐

