Python如何删除列表中每个元组内除最后一个外的所有整数
Python列表元组元素筛选实现方案
原有代码问题
你编写的列表推导仅遍历外层列表的元组元素,判断元组本身是否为整数类型,没有处理每个元组内部的子元素,因此无法实现需求。
实现逻辑
核心处理逻辑针对每个元组执行两步操作:
- 筛选出元组内所有非整数类型的元素
- 提取元组内最后一个出现的整数元素
- 将两部分结果拼接为新元组,最终组成结果列表
代码实现
可读性优先写法
mylist = [('a',1,'b',2,'c',3), ('d',1,'e',2),('f',1,'g',2,'h',3,'i',4)] result = [] for tup in mylist: # 提取所有非整数元素 non_int_items = [item for item in tup if not isinstance(item, int)] # 提取所有整数元素后取最后一个 all_ints = [item for item in tup if isinstance(item, int)] last_int = all_ints[-1] # 拼接为新元组加入结果 result.append(tuple(non_int_items + [last_int])) print(result)
效率优化单行写法
通过反向遍历快速定位最后一个整数,避免重复遍历元组:
mylist = [('a',1,'b',2,'c',3), ('d',1,'e',2),('f',1,'g',2,'h',3,'i',4)] result = [tuple([x for x in t if not isinstance(x, int)] + [next(i for i in reversed(t) if isinstance(i, int))]) for t in mylist]
输出结果
两种写法运行后均可得到预期输出:[('a', 'b', 'c', 3), ('d', 'e', 2), ('f', 'g', 'h', 'i', 4)]
内容的提问来源于stack exchange,提问作者pottttttossss
相关产品推荐
相关产品推荐

