私はzipクラスの機能を学びたいと思っていました。私はこの非常に単純な例を書いた。Python zipオブジェクトは一度しか使用できません。何故ですか?
>>> names = ['name1','name2','name3']
>>> ages = ['age1','age2','age3']
>>> print(zip(names, ages))
<zip object at 0x03DB18F0>
>>> zipped = zip(names, ages)
for i in zipped:
type(i)
print(i)
と出力されます(予想通り) -
<class 'tuple'>
('name1', 'age1')
<class 'tuple'>
('name2', 'age2')
<class 'tuple'>
('name3', 'age3')
私が書く場合はすぐにこの行の後:
for i in zipped:
print(i)
それはコンパイルだけを印刷しません!
>>> zipped = zip(names, ages)
>>> for i in zipped:
print(i)
('name1', 'age1')
('name2', 'age2')
('name3', 'age3')
正しく印刷この時間 - 私は再びこれをしなかった再確認するには
。解凍をしながらでも -
>>> names2, ages2 = zip(*zipped)
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
names2, ages2 = zip(*zipped)
ValueError: not enough values to unpack (expected 2, got 0)
zipped
変数が何らかの理由で空になったようですか?
注:必要に応じて、質問のタイトルを変更することができます。私はWindows(10)マシンでPython 3.6.1を使用しています。
私の答え正解しました。どうもありがとうございます。それは私が持っていた唯一の推測でした:)それは発電機の仕組みのように聞こえます。それは同じ/同様の実装ですか? – Arjee
@Arjeeジェネレータは、イテレータの作成を容易にするために導入された言語構造ですが、すべてのイテレータがジェネレータであるとは限らず、例えばジェネレータはコルーチンなどの他のものに使用されています。 –
@Arjee [this](https://stackoverflow.com/questions/2776829/difference-between-pythons-generators-and-iterators)の質問を参照してください。 –