列表理解 ValueError:要解压的值太多

bob*_*box 0 python

我有一个将 2 项列表生成为[datestamp, timestamp].

如果我将其放入列表理解中:

[(ds,ts) for ds,ts in process]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

[(ds,ts), (ds,ts), (ds,ts)]
Run Code Online (Sandbox Code Playgroud)

我得到的是ValueError: too many values to unpack.

这是因为for循环迭代到进程返回的列表中:

for ds,ts in [datestamp, timestamp]
Run Code Online (Sandbox Code Playgroud)

不分配ds=datestampts=timestamp但在每个字母,而迭代...如果这个工作它会给(d,t)(a,i)(t,m)(e,e)

所以我知道出了什么问题……但不知道如何进行这项工作!(是的,这确实让人觉得很傻……我知道答案很简单

wwi*_*wii 5

这有效:

process = [[1,2],[3,4],[5,6]]
a = []
for ds, ts in process:
    print(ds, ts)
    a.append((ds, ts))
Run Code Online (Sandbox Code Playgroud)

z = [(ds, ts) for (ds, ts) in process]
q = [(ds, ts) for ds, ts in process]
Run Code Online (Sandbox Code Playgroud)

如果您遇到'ValueError: too many values to unpack'异常,则流程必须生成具有两个以上项目的可迭代对象。

展开列表理解并处理异常- 在 except 套件中打印一些相关的内容以查看可能出错的地方,然后返回到源代码。就像是

process = [[1,2],[3,4],[5,6], [7,8,9]]

a = []
try:
    for thing in process:
        ds, ts = thing
        a.append((ds, ts))
except ValueError as e:
    print(e, '\t', thing)
Run Code Online (Sandbox Code Playgroud)