Python ValueError:要取消处理的值太多

2024-04-20 13:59:00 发布

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

我有一个非常简单的代码,我想循环通过两个列表在同一时间。但是,这给了我一个ValueError:太多的值无法解包。你知道吗

def testing_something():
    list1 = [1,2,3,4,45]
    list2 = [1,4,4]
    return list1, list2

for q,z in testing_something():
    print (q,z)

testing_something()的输出是([1,2,3,4,45],[1,4,4]),所以我可以想象能够同时循环这个输出,在我的例子中q是[1,2,3,4,45],z是[1,4,4]。为什么这会引起一个值错误?你知道吗


Tags: 代码in列表forreturndef错误testing
3条回答

不能使用单个for同时迭代两个列表。你应该使用zip函数

def testing_something():
    list1 = [1,2,3,4,45]
    list2 = [1,4,4]
    return list1, list2

for q,z in zip(testing_something()):
    print(q)
    print(z)

请注意,zip将迭代,直到列表包含元素:如果它完成对一个元素的迭代,它将停止迭代。这可以通过itertools.zip\u最长,它将输出与越界索引对应的None:如果要使用它,必须导入itertools模块

不能像在for循环中那样迭代单个变量,这是将q、z作为列表的简单方法。你知道吗

def testing_something():
    list1 = [1,2,3,4,45]
    list2 = [1,4,4]
    return list1, list2

q,z=testing_something()
print q
print z

如果希望在for循环的第一次(也是唯一一次)迭代中q=[1, 2, 3, 4, 45]z=[1,4,4],那么应该return [[list1, list2]]。你知道吗

但是,如果计划只返回一对列表,则可以完全跳过for循环(并保留问题中发布的代码):

q, z = testing_something()
print(q, z)

相关问题 更多 >