タプルのリストを1つのタプルに変換する方法はありますか?私はcursor.fetchall()からのタプルのリストを受け取っているが、単一のタプルにこれをしたいと思います。たとえばPythonタプルのリストを単一タプルに変換する
curr_table_columns = cursor.fetchall()
:
[(u'w_id',), (u'w_name',), (u'w_street',)]
が
[(u'w_id', u'w_name', u'w_street')]
タプルのリストを1つのタプルに変換する方法はありますか?私はcursor.fetchall()からのタプルのリストを受け取っているが、単一のタプルにこれをしたいと思います。たとえばPythonタプルのリストを単一タプルに変換する
curr_table_columns = cursor.fetchall()
:
[(u'w_id',), (u'w_name',), (u'w_street',)]
が
[(u'w_id', u'w_name', u'w_street')]
With itertools.chain
、それは自明です。 from itertools import chain
とあなたが行うことができ、次のいずれか
[tuple(chain.from_iterable(curr_table_columns))]
か:(無制限のためtuple
でラップしていないのに!)
[tuple(chain(*curr_table_columns))]
前者は、長いまたは無制限反復可能な入力のために好ましいです。小さな入力(特に、すでにlist
またはtuple
のもの)の場合、後者はやや遅くなりますが、大丈夫です。いずれも、genexprよりもはるかに高速で、任意のサイズのインプットに対してインデックスを作成することになります。
てみなりこれは:
a=[(u'w_id',), (u'w_name',), (u'w_street',)]
print [tuple([i[0] for i in a])]
出力:
[(u'w_id', u'w_name', u'w_street')]
ない効率的な*が、それは簡単です:あなたがしなければならない場合
>>> ts = [(u'w_id',), (u'w_name',), (u'w_street',)]
>>> sum(ts,())
('w_id', 'w_name', 'w_street')
ので、ちょうどリストでラップ:
>>> result = [sum(ts,())]
>>> result
[('w_id', 'w_name', 'w_street')]
*警告:二次的に拡大縮小します。いくつかは、いくつかの列名を1つのコンテナに結合するためのスライドであるようにする傾向があります。間違いなく、この方法で数百万のタプルを処理しようとしないでください。
直線時間の間、itertools
溶液を使用してください。
注:[sum 'docs](https://docs.python.org/3/library/functions.html#sum)自身は、この目的のために' sum'を使用することを推奨しません(代わりに 'itertools.chain'を推奨します)。それは機能しますが、入力が大きくなるとスケーリングはひどいものになります( 'sum'はシーケンスと一緒に使用される場合、Schlemiel the Painter's algorithm(https://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm)です)。 – ShadowRanger
私の答え+1にあなたのコメントをありがとう+1 – bernie
@バーニー:私はあなたのことを編集すると思った;あなたが削除したので自分の投稿のみ投稿しました。 :-) – ShadowRanger
心配はいりません! :-) – bernie