[1, 109, 2, 109, 2, 130, 2, 131, 2, 132, 3, 28, 3, 127]
私はこの配列を持っていて、それをタプルのリストに変えたいと思っています。各タプルには2つの値があります。したがって、このリストは次のようになります[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
質問する
291 次
4 に答える
12
zipをスライスと組み合わせて使用して、タプルの新しいリストを作成できます。
my_new_list = zip(my_list[0::2], my_list[1::2])
これにより、次の出力で新しいリストが生成されます
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
この背後にあるプロセスは非常に簡単です。最初にslicingを使用して、既存のリストを 2 つの新しいリストに分割します。
print my_list[0::2] # [1, 2, 2, 2, 2, 3, 3]
print my_list[1::2] # [109, 109, 130, 131, 132, 28, 127]
次に、zipを使用して、これら 2 つのリストを 1 つのタプル リストに結合します。
print zip(my_list[0::2], my_list[1::2])
于 2013-04-06T14:55:21.297 に答える
9
>>> it = iter(L)
>>> zip(*[it]*2)
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
説明
it = iter(L)
初期リストにイテレータを作成します
[it]*2
同じ反復子で構成されるリストを 2 回作成します。
*
パラメータの最初の場所で使用される は、パラメータをアンパックするために使用されるため、 にzip(*[it]*2)
変わりますzip(it,it)
。を使用できますがzip(it,it)
、zip(*[it]*2)
より一般的な構造であり、結果のタプルで任意の数の値に拡張できます。
このアプローチの核心は、zip
各反復で各引数から 1 つの値を取得しようとすることです。しかし、すべての引数が実質的に同じ反復子であることが判明したため、毎回新しい値が生成されます。
于 2013-04-06T14:54:11.847 に答える
0
ovgolovinの答えに触発されました:
>>> it=iter(L)
>>> [(el, next(it)) for el in it]
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
操作方法が少し分かりやすいかもしれません。タプルの順序を逆にすることもできます:
>>> it=iter(L)
>>> [(next(it), el) for el in it]
[(109, 1), (109, 2), (130, 2), (131, 2), (132, 2), (28, 3), (127, 3)]
于 2013-07-09T18:09:48.207 に答える