Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何一次解包两个值?_Python_Class_Integer - Fatal编程技术网

Python 如何一次解包两个值?

Python 如何一次解包两个值?,python,class,integer,Python,Class,Integer,所以我有这个输入,可以是用户想要的任意多个整数 我想把他们分成两半 number = input() a, b = (int(i) for i in numbers.split(' ')) Hey = Change(a, b) 变化只是一个类,它对a,b做了一些改变。我这里的问题是,当我运行它并且用户给出了两个以上的整数时,我得到一个错误:“ValueError:太多的值无法解包(预期为2)” 有没有一种方法可以设置它,这样它就可以解包前两个,然后解包后两个,依此类推 提前感谢诸如此类: nu

所以我有这个输入,可以是用户想要的任意多个整数

我想把他们分成两半

number = input()
a, b = (int(i) for i in numbers.split(' '))
Hey = Change(a, b)
变化只是一个类,它对a,b做了一些改变。我这里的问题是,当我运行它并且用户给出了两个以上的整数时,我得到一个错误:“ValueError:太多的值无法解包(预期为2)”

有没有一种方法可以设置它,这样它就可以解包前两个,然后解包后两个,依此类推

提前感谢

诸如此类:

numbers = input()
tokens = numbers.split()
for a, b in zip(tokens[::2], tokens[1::2]):
    Hey = Change(int(a), int(b))
大概是这样的:

numbers = input()
tokens = numbers.split()
for a, b in zip(tokens[::2], tokens[1::2]):
    Hey = Change(int(a), int(b))

实际上,您可以执行以下操作:

gen = (int(i) for i in input().split())
for a in gen:
   Hey = Change(a, next(gen))

由于gen是一个生成器表达式,for循环将获取第一个项,并将其分配给
a
,而
next(gen)
调用将从生成器中获取第二个值,因此您将以成对方式获取这两个值。这是一个更好的解决方案,因为您不需要额外的列表副本,正如下面的答案所示。

实际上,您可以执行以下操作:

gen = (int(i) for i in input().split())
for a in gen:
   Hey = Change(a, next(gen))
numbers = '1 2 5 8 6 9 4 5'
num_list = [int(i) for i in numbers.split(' ')]
for i in num_list[::2]:
    print(i, num_list[num_list.index(i)+1])
由于gen是一个生成器表达式,for循环将获取第一个项,并将其分配给
a
,而
next(gen)
调用将从生成器中获取第二个值,因此您将以成对方式获取这两个值。这是一个更好的解决方案,因为你不需要额外的列表副本,就像下面的答案一样

numbers = '1 2 5 8 6 9 4 5'
num_list = [int(i) for i in numbers.split(' ')]
for i in num_list[::2]:
    print(i, num_list[num_list.index(i)+1])
输出:

输出:


非常感谢。非常感谢。当你在做的时候,你可以做
gen=map(int,input().split())
。实际上,在我看来,不再需要使用map函数了,而生成器表达式或dict/list理解对我来说更易读。不过,我同意,你的答案也不错,但这只是个人喜好。从速度上看,他们是一样的。在这种情况下,我发现
map
更具可读性,但这是我个人的偏好。当你这样做时,你可以做
gen=map(int,input().split())
。实际上,我认为不再需要使用map函数,而生成器表达式或dict/list理解对我来说更具可读性。不过,我同意,你的答案也不错,但这只是个人喜好。从速度上看,他们是一样的。在这种情况下,我发现
map
更具可读性,但这显然是个人偏好。