私はPythonに二つのイテラブルを持っています、そしてそれらをペアで調べたいのです。
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print "f: ", f, "; b: ", b
結果は以下のようになります。
f: 1; b: 4
f: 2; b: 5
f: 3; b: 6
1つの 方法は、インデックスを反復することです。
for i in xrange(len(foo)):
print "f: ", foo[i], "; b: ", b[i]
しかし、それは私にとってはやや気味が悪いようです。もっと良い方法はありますか?
for f, b in Zip(foo, bar):
print(f, b)
Zip
またはfoo
の短い方が停止すると、bar
は停止します。
In Python 2 、 Zip
はタプルのリストを返します。 foo
とbar
が大規模でない場合はこれで問題ありません。両方とも大規模な場合、Zip(foo,bar)
の形成は不必要に大規模な一時変数であり、リストの代わりにイテレーターを返すitertools.izip
またはitertools.izip_longest
に置き換える必要があります。
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izip
またはfoo
が使い果たされると、bar
は停止します。 foo
とbar
の両方が使い果たされるとizip_longest
は停止します。短い方の反復子が使い果たされると、izip_longest
は、その反復子に対応する位置にNone
を持つTupleを生成します。必要に応じて、fillvalue
以外に別のNone
を設定することもできます。 全文 についてはこちらをご覧ください。
In Python 3 、 Zip
はPython2のitertools.izip
のようにタプルのイテレータを返します。タプルのリストを取得するにはlist(Zip(foo, bar))
を使います。そして両方のイテレータが使い尽くされるまでZipするには、 itertools.Zip_longest を使用します。
Zip
とそのZip
のようなbrethenは引数として任意の数のイテラブルを受け取ることができることにも注意してください。例えば、
for num, cheese, color in Zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
版画
1 red manchego
2 blue stilton
3 green brie
Zip
関数が欲しいです。
for (f,b) in Zip(foo, bar):
print "f: ", f ,"; b: ", b
組み込みのZip
はまさにあなたが望むことをします。リストの代わりにイテラブルに対して同じものを使いたいのなら、itertools.izipを見てください。
お探しのものは Zip
です。
あなたは ' Zip '関数を使うべきです。これはあなた自身のZip関数がどのように見えるかの例です。
def custom_Zip(seq1, seq2):
it1 = iter(seq1)
it2 = iter(seq2)
while True:
yield next(it1), next(it2)
Zip機能が問題を解決
ドキュメント: Zipライブラリ関数
目的:出力を並べて配置すること問題:
#value1 is a list
value1 = driver.find_elements_by_class_name("review-text")
#value2 is a list
value2 = driver.find_elements_by_class_name("review-date")
for val1 in value1:
print(val1.text)
print "\n"
for val2 in value2:
print(val2.text)
print "\n"
出力:
review1
review2
review3
date1
date2
date3
溶液:
for val1, val2 in Zip(value1,value2):
print (val1.text+':'+val2.text)
print "\n"
出力:
review1:date1
review2:date2
review3:date3
1つの辞書で3つのタイプを使うことができます:
def construct_dictionary_from_lists(names, ages, scores):
end_str_dic = {}
for item_name, item_age, score_item in Zip(names, ages, scores):
end_str_dic[item_name] = item_age, score_item
return end_str_dic
print(
construct_dictionary_from_lists(
["paul", "saul", "steve", "chimpy"],
[28, 59, 22, 5],
[59, 85, 55, 60]
)
)