Python 如何展平包含两项元组和单个项元组的列表中的内部元组

Python 如何展平包含两项元组和单个项元组的列表中的内部元组,python,list,Python,List,我想知道是否有任何有效的方法将包含两项元组和单个项的元组的列表转换为扁平列表或NumPy数组 list = [((-1, -1), -1), ((-1, -1), 0), ((-1, -1), 1), ((-1, -1), 2), ...] 我想要的结果是: new_list = [[-1, -1, -1], [-1, -1, 0], [-1, -1, 1], [-1, -1, 2], ...] 到目前为止,我已经尝试使用 new_list = [item for i in list for

我想知道是否有任何有效的方法将包含两项元组和单个项的元组的列表转换为扁平列表或NumPy数组

list = [((-1, -1), -1), ((-1, -1), 0), ((-1, -1), 1), ((-1, -1), 2), ...]
我想要的结果是:

new_list = [[-1, -1, -1], [-1, -1, 0], [-1, -1, 1], [-1, -1, 2], ...]
到目前为止,我已经尝试使用

new_list = [item for i in list for item in i]
但结果是:

[(-1, -1), -1, (-1, -1), 0, (-1, -1), 1, (-1, -1), 2, ...]
当我试图删除嵌套的元组时,出现了错误

TypeError: 'int' object is not iterable

您需要保持列表的结构(或多或少)。您实际上是在展平嵌套元素,而不是列表本身。拆包是一种简单的方法

new_lst = [[*x[0], x[1]] for x in lst]
另一种是直接引用:

new_lst = [[x[0][0], x[0][1], x[1]] for x in lst]

由于每个元组的结构似乎都是
((a,b),c)
,因此您可以在元组解包时使用列表理解:

>>> lst = [((-1, -1), -1), ((-1, -1), 0), ((-1, -1), 1), ((-1, -1), 2)]
>>> [[a, b, c] for ((a, b), c) in lst]
[[-1, -1, -1], [-1, -1, 0], [-1, -1, 1], [-1, -1, 2]]
再短一点:

[[*x, y] for x, y in lst]

假设
x=[(-1,-1),-1),(-1,-1),0),(-1,-1),1),(-1,-1),2),…],这应该是可行的。

new_list = [list(i[0])+[i[1]] for i in x]

这一结果也并非平淡无奇。此外,元组的结构是否总是相同的?是的,它将始终是相同的@托比亚斯·汉克斯!我现在学到了另一个解决问题的方法有趣的事实:我在其他两个答案发布之前写下了这篇文章,然后看到了这些答案,并且确信其中至少有一个会看着另一个答案,像“啊,对了,我们可以做到”,然后将它们结合起来,最终得到这个答案。那就没有发生。然后Mad编辑了,我想是要添加这个,但不是,是要添加第二个,更多的订阅解决方案:-)。然后我就想好了,如果他们没有,我会的。