我将此作为输出:
@Override
我希望将其转换为列表,例如:
L = ([['AAA', '193.0', 'GGG']], [['BBB', '196.33333333333334', 'TTT']],
[['CCC', '18.666666666666668', 'AAA']])
我尝试过使用
L = [['AAA', '193.0', 'GGG'], ['BBB', '196.33333333333334', 'TTT'],
['CCC', '18.666666666666668', 'AAA']]
和
L = list(L)
和
[list(elem) for elem in L]
但我不能让他们中的任何一个工作。 有人可以帮帮我吗?
答案 0 :(得分:3)
你可以使用以下任何一种:
list(zip(*L)[0])
[item for subitem in L for item in subitem]
list(itertools.chain(*L))
functools.reduce(lambda x, y: x + y, L)
list(zip(*L)[0])
第一个解决方案会在tuple
中转换生成的list
,就像您想要的那样。但如果结果仅用于阅读,则不需要list
。 tuple
会很好。
[item for subitem in L for item in subitem]
第二种情况甚至会变平:
L = ([['AAA', '193.0', 'GGG'], ['AAA', '193.0', 'GGG']], [['BBB', '196.33333333333334', 'TTT']], [['CCC', '18.666666666666668', 'AAA']])
到
[['AAA', '193.0', 'GGG'],
['AAA', '193.0', 'GGG'],
['BBB', '196.33333333333334', 'TTT'],
['CCC', '18.666666666666668', 'AAA']]
list(itertools.chain(*L))
第三种解决方案甚至更漂亮。它做了什么它通过一个iterables列表并返回每个iterable的元素。
functools.reduce(lambda x, y: x + y, L)
此解决方案只是为了说明如何实现这一目标。
答案 1 :(得分:2)
你的元组中有一个列表列表,但每个列表都包含一个元素。
使用列表推导重建列表,获取列表中唯一的元素:
L = ([['AAA', '193.0', 'GGG']], [['BBB', '196.33333333333334', 'TTT']],
[['CCC', '18.666666666666668', 'AAA']])
L = [x[0] for x in L]
print(L)
结果:
[['AAA', '193.0', 'GGG'], ['BBB', '196.33333333333334', 'TTT'], ['CCC', '18.666666666666668', 'AAA']]
答案 2 :(得分:1)
你的逻辑是有缺陷的。你有一个包含列表的单元素列表元组,你只需要一个列表列表。所以你需要提取每个列表的第一个元素:
L = [elem[0] for elem in L]
答案 3 :(得分:1)
Numpy的挤压会从列表和元组中删除额外的维度。
from numpy import squeeze
L = squeeze(L).tolist()
答案 4 :(得分:1)
可以使用map
,典型用途map(function, iterable)
在python 2.7 map中,返回将函数应用于iterable中每个项的结果列表。所以我们可以使用
L = map(lambda l:l[0],L)
在python 3.x中,map返回一个迭代器,它将函数应用于iterable的每个项目(这是我们的元组中的元组),产生结果,因此需要list才能将生成的迭代器转换为列表。即。
L = list(map(lambda l:l[0],L))
在任何一种情况下,print(L)
的输出都是
[['AAA', '193.0', 'GGG'],
['BBB', '196.33333333333334', 'TTT'],
['CCC', '18.666666666666668', 'AAA']]
函数lambda l: l[0]
是一个匿名函数,它接受一个列表并返回其中的第一个元素。换句话说,它会挤压元组的列表元素。