如何从元组列表中创建列表?

时间:2012-11-26 01:45:14

标签: python list tuples

如果我有一个像元组列表:

L=[(('a','b','c','d'),2),(('f','e','d','a'),3)]

我想制作一个类似的列表:

L1=[['a','b','c','d'],['f','e','d','a']]

这就是我所做的:

L1=[]

for item in L:
    for(letter,integer) in item:
        L1.append(list(letter))
        print(L1)

但它出现错误,说有太多值要解压缩

我的代码出了什么问题?

5 个答案:

答案 0 :(得分:9)

这里有用的是列表理解:

L1 = [list(letters) for (letters, number) in L]

这将迭代列表中的每一对,获取每对的字母元组并将其转换为列表。然后它将每个结果存储为新列表的元素。

答案 1 :(得分:2)

你做了:

 for item in L:
      for(letter,integer) in item:
          L1.append(list(letter))
          print(L1)

然而,item已经是一个元组,并且不需要迭代它。你想要的是

for letter, integer in L:
    L1.append(list(letter))

或者...

for item in L:
    letter, integer = item
    L1.append(list(letter))

答案 2 :(得分:2)

你可以试试:

L1 = [list(i[0]) for i in L]

答案 3 :(得分:1)

你的问题在这一行:

for(letter,integer) in item:

这将(尝试)迭代item,这是一个2元素元组。替换为:

(letter,integer) = item

它会起作用。当然,有更简洁的方法,但这应该让你开始。

答案 4 :(得分:0)

有几个选项可以做到这一点,其中一个是通过获取第一个元素来映射列表,例如。像这样:

>>> from operator import itemgetter
>>> map(list, map(itemgetter(0), L))
[['a', 'b', 'c', 'd'], ['f', 'e', 'd', 'a']]

另一个是使用列表推导:

>>> [list(item[0]) for item in L]
[['a', 'b', 'c', 'd'], ['f', 'e', 'd', 'a']]

或lambda:

>>> map(lambda x: list(x[0]), L)
[['a', 'b', 'c', 'd'], ['f', 'e', 'd', 'a']]

但也许你不需要列表和元组会做。在这种情况下,示例更简单:

>>> from operator import itemgetter
>>> map(itemgetter(0), L)
[('a', 'b', 'c', 'd'), ('f', 'e', 'd', 'a')]
>>> [item[0] for item in L]
[('a', 'b', 'c', 'd'), ('f', 'e', 'd', 'a')]
>>> map(lambda x: x[0], L)
[('a', 'b', 'c', 'd'), ('f', 'e', 'd', 'a')]