ValueError:要解包的值太多:python列表操作

2024-04-25 17:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python列表

l= [[1105.46, 1105.75, 1105.75, 1105.46, 1051.46],
 [ 120.23,  120.23,  120.41,  20.41,  120.23]]

我怎样才能得到这个:

answer = [[1105.46,120.23], ....[1051.46,120.23]]

我是这样做的:

answer = [[x, y] for x, y in l]
print answer

ValueError:要解包的值太多


Tags: answerin列表forprintvalueerror
3条回答

你也可以尝试下面的方法。你知道吗

>>> l = [[1105.46, 1105.75, 1105.75, 1105.46, 1051.46], [ 120.23,  120.23,  120.41,  20.41,  120.23]]
>>>
>>> answer = [list(tup) for tup in zip(*l)]
>>>
>>> answer
[[1105.46, 120.23], [1105.75, 120.23], [1105.75, 120.41], [1105.46, 20.41], [1051.46, 120.23]]
>>>

这里有一个简单的方法:

>>> map(list, zip(*l))
[[1105.46, 120.23], [1105.75, 120.23], [1105.75, 120.41], [1105.46, 20.41], [1051.46, 120.23]]

如果不关心嵌套元素是列表还是元组,则更简单:

>>> zip(*l)
[(1105.46, 120.23), (1105.75, 120.23), (1105.75, 120.41), (1105.46, 20.41), (1051.46, 120.23)]

使用标准python中的zip()函数:

l= [[1105.46, 1105.75, 1105.75, 1105.46, 1051.46],
 [ 120.23,  120.23,  120.41,  20.41,  120.23]]

new_list = []
for x, y in zip(l[0], l[1]):
    new_list.append([x, y])

print(new_list)

输出:

[[1105.46, 120.23], [1105.75, 120.23], [1105.75, 120.41], [1105.46, 20.41], [1051.46, 120.23]]

带列表理解的单行版本:

print([[x, y] for x, y in zip(l[0], l[1])])

相关问题 更多 >