2016-11-20 2 views
0

私はこの入力を、ユーザーが望むほどの整数にすることができます。一度に2つの値をアンパックする方法は?

私は2つに分割したいと思います。

number = input() 
a, b = (int(i) for i in numbers.split(' ')) 
Hey = Change(a, b) 

変更はA、Bに何かをするだけのクラスです。ここで私の問題は、私はそれを実行し、ユーザーが2つ以上の整数を与えるとき、私は "ValueError:解凍するには値が多すぎる(期待値2)"というエラーが出るということです。

これを設定して最初の2つを展開して次の2つを展開する方法はありますか?事前に

おかげで、このような

答えて

2

何か:

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

ありがとうございました。 –

2

Actualyあなたが何かを行うことができます:forループGENはジェネレータ式ですので

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

は、最初がかかりますアイテムを割り当ててaに割り当て、next(gen)コールでジェネレータから2番目の値を取得すると、両方の値がペアになります。それはあなたがリストの余分なコピーを必要としないので、以下の答えで行われているように、より良い解決策です。アウト

+1

あなたがいる間に、 'gen = map(int、input()。split())'を実行することができます。 –

+0

実際には私の意見では、ジェネレータ表現やdict/list comprehensionsは私にとってより読みやすいものの、マップ関数を使う必要はもうありません。しかし、私はあなたの答えも良いことに同意しますが、それはちょうど個人的な好みに関するものです。 – Nf4r

+0

速度的には同じです。この場合、 'map'が読みやすくなりますが、それは個人的な好みです。 –

1
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]) 

1 2 
5 8 
6 9 
4 5 
関連する問題