如果我有一个像元组列表:
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)
但它出现错误,说有太多值要解压缩
我的代码出了什么问题?
答案 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')]