2017-01-26 1 views
3

リストのリストを連結するためのPythonicの方法がありますか?例えば、私は1つのインデックスを除いたリストのリストを連結する

[['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 

を持っていた場合、その結果にインデックス1を望んでいなかった、私の連結リストは次のようになります。私は反対反復に対してループとチェックでこれを行うことができ

['a', 'd', 'e', 'f', 'g'] 

私の選択の指標ですが、よりクリーンな方法が望まれます。

答えて

3

あなたはスライスを使用することができます。

from itertools import chain 

ls = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 

list(chain.from_iterable(ls[:1] + ls[2:])) 

あなたが一緒にスライスを追加し、新しいリストを作成するコストを回避したい場合、それは少し複雑になります。ここでは

from itertools import chain, islice 
list(chain.from_iterable(chain(islice(ls, 1), islice(ls, 2, None)))) 
+1

和の使用に問題があります。 – MSeifert

+0

私は最新バージョンのPythonを使用していますが、そこにリストを作成しません。 – L3viathan

+1

しかし 'ls [:1]'と 'ls [2:]'はどちらも新しいリストを作成します。とにかくそのような問題は、あまりにも合計の過剰なため心配しないでください:) – MSeifert

0

は1ですway:

lists = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 
subset = [x for ind, x in enumerate(lists) if ind != 1] 
subset # [['a'], ['d'], ['e', 'f', 'g']] 
flattened = [item for l in subset for item in l] 
flattened # ['a', 'd', 'e', 'f', 'g'] 

これらを組み合わせて1つの理解度にすることができます。これを2つのステップで実行しましたどのように各パートが何をするかをはっきりと示します。あなたは外部ライブラリを使用して気にしない場合は

0

私はiteration_utilities からremoveflattenを提供することができます:

>>> from iteration_utilities import remove, flatten 

>>> l = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 

>>> list(flatten(remove(l, 1))) 
['a', 'd', 'e', 'f', 'g'] 

1私はそのライブラリの作者です。

0

これは〜は「私が好きな私のインデックスに対する反復に対するループとチェックしてこれを行うことができます....」

が、リスト内包で、無LIBS

nix = 1 

myls = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 

[e for ls in myls for e in ls if ls != myls[nix]]  

Out[11]: ['a', 'd', 'e', 'f', 'g'] 
です素敵な読み込み

スライスの列挙のいずれか

別の必要がないと平らな可能性

sum(myls[:nix] + myls[nix+1:],[]) 

しかし、あなたはまた、一時リストの作品を避けるために、 `islice`を使用することができますitertoolsを使用するつもりなら、いくつかの方法https://mathieularose.com/how-not-to-flatten-a-list-of-lists-in-python/

関連する問題