如何在列表列表中解包单项元组

问题描述

我有以下列表形式:

[[('1st',),('2nd',('5th',)],[('1st',)]]

我想将其转换为:

[['1st','2nd','5th'],['1st']]

我尝试过:

res = [list(ele) for ele in racer_placement for ele in ele]

但是我得到的结果是

[['1st'],['2nd'],['5th'],['1st']]

解决方法

您需要嵌套理解(使用either a two layer loop in the inner comprehension,or use chain.from_iterable for flattening)。两层循环的示例(避免导入),请参见链接的问题,以扁平化list的内部tuple的其他方法:

>>> listolists = [[('1st',),('2nd',('5th',)],[('1st',)]]
>>> [[x for tup in lst for x in tup] for lst in listolists]
[['1st','2nd','5th'],['1st']]

请注意,在这种单元素tuple的特定情况下,您可以使用just来避免更复杂的拼合:

 >>> [[x for x,in lst] for lst in listolists]

每个the safest way of getting the only element from a single-element sequence in Python

,

您可以使用切片将元组的第一个元素构建的新列表替换为第一级列表的内容。

>>> racer_placement = [[('1st',)]]
>>> for elem in racer_placement:
...     elem[:] = [elem2[0] for elem2 in elem]
... 
>>> racer_placement
[['1st',['1st']]

由于这正在更新内部列表,因此对这些列表的任何其他引用也将看到更改。那可能是伟大的或灾难性的。

,
List = [[('1st',)]]
Parentlist = [] 
Temp=[] 
for childlist in List:
     Temp=[] 
     for x in childlist
          Temp.Add(x[0]) 
     parentlist.Add(Temp) 

这未经测试。