错误:解压缩的值太多(预期2) - Python

时间:2016-04-29 13:36:28

标签: python python-3.x pandas

首先,下面是列表,而不是元组也希望将数据附加到列表中以及所有需要知道错误原因的解决方案

尝试基本比较两个列表,这里" ref"是参考列表和" obt"是产品列表,在运行代码(如下)时会生成错误。

它的解决方案是什么?

还想将相同的内容应用到pandas中的数据框中,它的代码应该是什么?

ref =[1,2,3,4]
obt =[0.5,1,1.5,5]
i,j=0
for i,j in obt,ref:
    global i,j
    if (obt[i] <= ref[j]):
        print ("all ok")
    else:
        print("error")
    i=i+1
    j=j+1

5 个答案:

答案 0 :(得分:1)

我认为你会对zip表现得很好:

wlan-145-94-194-94:folder ruben$ npm test

> plugify-admin@ pretest /Users/ruben/dev/folder
> gulp pretest

(node:3251) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
[15:12:54] Using gulpfile ~/dev/folder/gulpfile.js
[15:12:54] Starting 'copylibs'...
[15:12:54] Starting 'typescript'...
[15:12:58] Finished 'copylibs' after 4.23 s
[15:12:58] Finished 'typescript' after 4.26 s
[15:12:58] Starting 'pretest'...
[15:12:58] Finished 'pretest' after 115 μs

> folder@ test /Users/ruben/dev/folder
> karma start karma.conf.js

29 04 2016 15:13:00.742:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
29 04 2016 15:13:00.763:INFO [launcher]: Starting browser Firefox
29 04 2016 15:13:04.603:INFO [Firefox 46.0.0 (Mac OS X 10.11.0)]: Connected on socket /#IPI7AaPJBP7EA1i4AAAA with id 84025354
29 04 2016 15:13:05.403:WARN [web-server]: 404: /base/builds/development/js/app.component
Missing error handler on `socket`.
TypeError: (msg || "").replace is not a function
    at /Users/ruben/dev/folder/node_modules/karma/lib/reporter.js:45:23
    at onBrowserError (/Users/ruben/dev/folder/node_modules/karma/lib/reporters/base.js:58:60)
    at .<anonymous> (/Users/ruben/dev/folder/node_modules/karma/lib/events.js:13:22)
    at emitTwo (events.js:111:20)
    at emit (events.js:191:7)
    at onKarmaError (/Users/ruben/dev/folder/node_modules/karma/lib/browser.js:95:13)
    at Socket.<anonymous> (/Users/ruben/dev/folder/node_modules/karma/lib/events.js:13:22)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:188:7)
    at Socket.onevent (/Users/ruben/dev/folder/node_modules/socket.io/lib/socket.js:335:8)
    at Socket.onpacket (/Users/ruben/dev/folder/node_modules/socket.io/lib/socket.js:295:12)
    at Client.ondecoded (/Users/ruben/dev/folder/node_modules/socket.io/lib/client.js:193:14)
    at Decoder.Emitter.emit (/Users/ruben/dev/folder/node_modules/component-emitter/index.js:134:20)
    at Decoder.add (/Users/ruben/dev/folder/node_modules/socket.io-parser/index.js:247:12)
    at Client.ondata (/Users/ruben/dev/folder/node_modules/socket.io/lib/client.js:175:18)
    at emitOne (events.js:96:13)
29 04 2016 15:13:07.475:WARN [Firefox 46.0.0 (Mac OS X 10.11.0)]: Disconnected (1 times)

Firefox 46.0.0 (Mac OS X 10.11.0): Executed 0 of 0 DISCONNECTED (2.876 secs / 0 secs)
npm ERR! Test failed.  See above for more details.

以下是for o, r in zip(obt, ref): if o <= r: print ("all ok") else: print("error") 将产生的内容:

zip(obt, ref)

并且,在循环时,您可以比较元组中的值。

答案 1 :(得分:1)

此赋值语句不起作用:

i,j=0

请改为尝试:

>>> i, j = 0, 0
>>> i
0
>>> j
0

但如果您想比较两个不同的列表,请按照以下方式进行比较:

import itertools
for i, j in itertools.zip_longest(list1, list2):
    # do stuff with i and j
    # if either i or j is none then
    # they are not the same lengths

答案 2 :(得分:0)

如果遇到不同长度列表的问题,也可以使用try,except语句 像:

try:
   for i, j in obt, ref:
   # Compare lists
except: # Enter error after except
   # Do something else

答案 3 :(得分:0)

您需要使用其他变量,然后使用i和j。这些将由for循环改变。最好使用for x in range(len(list)进行索引

答案 4 :(得分:0)

Python for循环实际上是foreach循环。你可以做到

ref =[1,2,3,4]
obt =[0.5,1,1.5,5]

for i in range(len(ref)):
    if (obt[i] <= ref[i]):
        print ("all ok")
    else:
        print("error")

范围函数将遍历数字0到数组的长度range(len(ref)) = [0,1,2,3],然后您可以使用Python中实际上是获取这些数字的foreach。

枚举函数将为您提供索引和值,因此您也可以执行

ref =[1,2,3,4]
obt =[0.5,1,1.5,5]

for i,r in enumerate(ref):
    if (obt[i] <= r):
        print ("all ok")
    else:
        print("error")

枚举函数返回索引和ref[i],它存储在i和r中。这个例子更好地展示了Python如何表现为foreach循环而不是for循环。

错误原因

i,j=0行上,您还必须给j一个值,这样您就可以i,j=0,0。现在发生的事情是0,0(0,0)是一回事。这是一个元组。然后必须解压缩元组。当解包元组时,第一个变量i得到第一个值0.第二个变量j得到第二个值。如果在元组中有更多值,这将继续,直到元组中的每个值都被解包为某个变量。

修复后,我们可以继续下一行。 for i,j in obt,ref。再次,您将看到完全相同的错误。这次python期望以[(2 value tuple), (2 value tuple), (2 value tuple), (2 value tuple)]的形式迭代某些东西。

zip函数可用于创建此结构,如上所述,或者如果您更喜欢在for循环中使用索引,则可以使用for i in range(len(ref))迭代列表索引[0,1,2,3]。这个 只有当ref和obt的长度相同时才能工作,否则你必须使用zip。

无论是使用zip还是我提到的方法,这两种方式都可以工作,这取决于您如何解决问题。如果一个列表比另一个列表长,则zip将截断更长的列表。 Games Braniac提到的itertools.zip_longest解决方案将扩展最短长度列表,使它们具有相同的大小,然后将它们拉上。