7

リストのセットに対して tupler と同じことを行う python ビルトイン、または同様のものはありますか:

def tupler(arg1, *args):
    length = min([len(arg1)]+[len(x) for x in args])
    out = []
    for i in range(length):
        out.append(tuple([x[i] for x in [arg1]+args]))
    return out

たとえば、次のようになります。

tupler([1,2,3,4],[5,6,7])

戻り値:

[(1,5),(2,6),(3,7)]

または、これを行う適切なpythonyの方法があるか、同様のジェネレーターがありますか???

4

4 に答える 4

15

あなたが探していると思いますzip()

>>> zip([1,2,3,4],[5,6,7])
[(1, 5), (2, 6), (3, 7)]
于 2011-04-13T11:59:07.267 に答える
5

組み込みの zip 関数を見てくださいhttp://docs.python.org/library/functions.html#zip

n などの 3 つ以上のリストを処理し、n-タプルを作成することもできます。

>>> zip([1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14])
 [(1, 5, 9, 13), (2, 6, 10, 14)]
于 2011-04-13T11:59:39.940 に答える
2
zip([1,2,3,4],[5,6,7])

--->[(1,5),(2,6),(3,7)]


args = [(1,5),(2,6),(3,7)]

zip(*args)

--->[1,2,3],[5,6,7]
于 2011-04-13T12:02:07.530 に答える
0

適切な方法は、zip関数を使用することです。

あるいは、リスト内包表記と組み込みenumerate関数
を使用して同じ結果を得ることができます。

>>> L1 = [1,2,3,4]
>>> L2 = [5,6,7]
>>> [(value, L2[i]) for i, value in enumerate(L1) if i < len(L2)]
[(1, 5), (2, 6), (3, 7)]
>>> 

上記の例の欠点は、最小の長さのリストを常に反復処理するとは限らないことです。

于 2011-04-13T12:29:38.953 に答える