8

タプルのリストがあります:

l=[(1,2,3),(4,5,6)]

タプルと同様に、リストは任意の長さにすることができます。これを、表示される順序で要素のリストまたはタプルに変換したいと思います。

f=[1,2,3,4,5,6] # or (1,2,3,4,5,6)

開発時に返されるタプルの数がわかっている場合は、それらを追加するだけです。

m = l[0] + l[1]  # (1,2,3,4,5,6)

しかし、実行時までタプルがいくつあるかわからないので、それはできません。これを行うために使用する方法があるように感じますが、わかりmapません。タプルを反復処理してアキュムレータに追加することはできますが、それでは決して使用されない多くの中間タプルが作成されます。タプル、タプルの要素を繰り返し処理し、それらをリストに追加することもできます。これは非常に非効率に思えます。たぶん、私が完全にぼやけているもっと簡単な方法があります。何かご意見は?

4

7 に答える 7

19

それらをチェーンします(追加のメモリを予約する代わりにジェネレーターを作成するだけです):

>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain.from_iterable(l))
[1, 2, 3, 4, 5, 6]
于 2012-02-22T19:03:41.120 に答える
9
l = [(1, 2), (3, 4), (5, 6)]
print sum(l, ()) # (1, 2, 3, 4, 5, 6)
于 2012-02-22T19:02:05.480 に答える
2
tuple(i for x in l for i in x) # (1, 2, 3, 4, 5, 6)
于 2012-02-22T19:11:38.023 に答える
2

次のすべてに pythonic ジェネレーター スタイルを使用します。

b=[(1,2,3),(4,5,6)]

list = [ x for x in i for i in b ] #produces a list
gen = ( x for x in i for i in b ) #produces a generator
tup = tuple( x for x in i for i in b ) #produces a tuple

print list
>> [1, 2, 3, 4, 5, 6]
于 2012-02-22T19:51:01.997 に答える
2
reduce(tuple.__add__, [(1,2,3),(4,5,6)])
于 2012-02-22T19:02:38.693 に答える
0

.extend()次のような関数を使用して、リスト内の値を組み合わせることができます。

l = [(1,2,3), (4,5,6)]
m = []
for t in l:
    m.extend(t)

またはreduceを使用した短いバージョン:

l = [(1,2,3), (4,5,6)]
m = reduce(lambda x,y: x+list(y), l, [])
于 2012-02-22T20:35:38.093 に答える
0
>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain(*l))
[1, 2, 3, 4, 5, 6]
于 2012-02-22T19:43:18.567 に答える