2

如果我有一个元组列表,例如:

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)

但它出现错误说有太多的值需要解压

我的代码有什么问题?

4

5 回答 5

9

这里有用的是列表推导:

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

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

于 2012-11-26T01:50:09.190 回答
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))
于 2012-11-26T01:49:15.223 回答
2

你可以试试:

L1 = [list(i[0]) for i in L]
于 2012-11-26T01:51:42.070 回答
1

您的问题出在这一行:

for(letter,integer) in item:

这将(尝试)迭代item2 元素元组。将其替换为:

(letter,integer) = item

它会起作用。当然,还有更简洁的方法可以做到这一点,但这应该让你开始。

于 2012-11-26T01:49:36.187 回答
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']]

或拉姆达:

>>> 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')]
于 2012-11-26T01:52:41.247 回答