如何将元组中的列表列表转换为python中的列表列表?

时间:2018-02-20 09:35:45

标签: python tuples

我将此作为输出:

@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]

但我不能让他们中的任何一个工作。 有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:3)

你可以使用以下任何一种:

  1. list(zip(*L)[0])
  2. [item for subitem in L for item in subitem]
  3. list(itertools.chain(*L))
  4. functools.reduce(lambda x, y: x + y, L)
  5. 第一个解决方案

    list(zip(*L)[0])
    

    第一个解决方案会在tuple中转换生成的list,就像您想要的那样。但如果结果仅用于阅读,则不需要listtuple会很好。

    第二种解决方案

    [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]是一个匿名函数,它接受一个列表并返回其中的第一个元素。换句话说,它会挤压元组的列表元素。