Python如何移除列表内元组的括号并合并为一维列表
问题
给定包含多个元组的列表:
L = [(1, 2, 3), (3, 2, 1), (2, 1, 6), (7, 3, 2), (1, 0, 2)]
需求是移除元组的括号,将所有数字合并为一个一维列表,期望输出为:
L = [1, 2, 3, 3, 2, 1, 2, 1, 6, 7, 3, 2, 1, 0, 2]
尝试以下代码后,虽移除了括号但生成带单引号的字符串元素:
L2 = [] for x in L: mm = (', '.join(str(j) for j in x)) L2.append(mm) print(L2)
得到结果:
L = ['1, 2, 3', '3, 2, 1', '2, 1, 6', '7, 3, 2', '1, 0, 2']
寻求正确实现方法。
解决方法
你的代码问题在于用join把每个元组转换成了字符串,所以最终列表里是字符串元素,而非数字类型元素。以下是几种正确的实现方式:
方法1:嵌套循环
最直观的方式,遍历每个元组,再遍历元组内的每个数字,逐个添加到新列表:
L = [(1, 2, 3), (3, 2, 1), (2, 1, 6), (7, 3, 2), (1, 0, 2)] L2 = [] for tpl in L: for num in tpl: L2.append(num) print(L2)
方法2:列表推导式
用Python列表推导式简化代码,逻辑和嵌套循环完全一致:
L = [(1, 2, 3), (3, 2, 1), (2, 1, 6), (7, 3, 2), (1, 0, 2)] L2 = [num for tpl in L for num in tpl] print(L2)
方法3:使用itertools.chain
如果处理的列表规模较大,itertools.chain的效率更高——它会直接迭代所有元素,不会创建中间列表:
import itertools L = [(1, 2, 3), (3, 2, 1), (2, 1, 6), (7, 3, 2), (1, 0, 2)] L2 = list(itertools.chain(*L)) # 也可以用chain.from_iterable,无需解包原列表 # L2 = list(itertools.chain.from_iterable(L)) print(L2)
以上三种方法的输出结果均符合预期:
[1, 2, 3, 3, 2, 1, 2, 1, 6, 7, 3, 2, 1, 0, 2]
内容的提问来源于stack exchange,提问作者Mohsen Ali
相关产品推荐
相关产品推荐

