扁平化混合类型列表

2 投票
2 回答
1163 浏览
提问于 2025-04-18 11:07

我有一个混合类型的列表,长得像这样:

[('1CFV',), 'NONRBP', [0.00325071141379, 0.278046326931, 0.291350892759]]

这个列表是用这个命令创建的:

In [12]: l1 =  [0.00325071141379, 0.278046326931, 0.291350892759]

In [13]: t1 = ('1CFV',)                                                          

In [14]: s1 = "NONRBP"

In [15]: mixl = [t1,s1,l1]

In [16]: mixl

有没有办法把它转换成:

   ['1CFV', 'NONRBP', 0.00325071141379, 0.278046326931, 0.291350892759]

我试过这个方法,但它把字符串'NONRBP'也压平了,这不是我想要的结果:

 [item for sublist in mixl for item in sublist]

2 个回答

0

那这个怎么样呢

[item for item in list if type(item) is not list] + 
[item for sublist in mixl if type(item) is list for item in sublist]

这个解决了一个特定的情况,就是当一个列表里面包含其他列表和其他可迭代的东西(比如字符串)时。

2
>>> final = []
>>> a = [('1CFV',), 'NONRBP', [0.00325071141379, 0.278046326931, 0.291350892759]]
>>> for i in a:
...   if hasattr(i, '__iter__'):
...     for j in i:
...       final.append(j)
...   else:
...     final.append(i)
... 
>>> print final
['1CFV', 'NONRBP', 0.00325071141379, 0.27804632693100001, 0.291350892759]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答