2017-01-26 14 views
3

Gibt es eine pythonische Möglichkeit zur Verkettung einer Liste von Listen, mit Ausnahme eines Index der Wahl? Zum Beispiel, wenn ichVerketten Sie eine Liste von Listen ohne einen Index

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

und wollte nicht Index 1 im Ergebnis würde meine verkettete Liste wie folgt aussehen:

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

ich mit einer Schleife dies tun könnte und Kontrolle gegen die Iteration gegen Mein Index der Wahl, aber ich hoffe, es gibt einen saubereren Weg.

Antwort

3

Sie können Slicing verwenden:

from itertools import chain 

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

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

Wenn Sie die Kosten für das Hinzufügen der Scheiben zusammen und die Schaffung neuer Listen vermeiden wollen, wird es etwas komplizierter:

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

Wenn Sie vorhaben, itertools verwenden Sie auch 'islice' verwenden können temporäre Liste Kreationen zu vermeiden. – MSeifert

+0

Ich benutze aktuelle Versionen von Python, es erstellt dort keine Liste. – L3viathan

+1

aber 'ls [: 1]' und 'ls [2:]' erstellen beide neue Listen. Egal, für so ein Problem, das ist sowieso totaler Overkill :) – MSeifert

0

Hier ist ein weg:

Sie könnten diese zu einem einzigen Verständnis kombinieren, ich habe es in zwei Schritten hier zu s gemacht wie klarer ist was jeder Teil macht.

0

Wenn Sie nichts dagegen haben eine externe Bibliothek konnte ich bieten remove und flatten von iteration_utilities :

>>> 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 I der Autor dieser Bibliothek bin.

0

das ist ~ "ich dies gegen meinen Index der Wahl mit einer Schleife und Prüfung gegen die Iteration tun könnte ...."

aber in einer Liste Verständnis, keine 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'] 

keine Notwendigkeit für enumerate entweder

anderen der Scheibe und abflachen Möglichkeiten, die schön liest

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

aber einige haben ein Problem mit der Verwendung von Summe, die Art und Weise https://mathieularose.com/how-not-to-flatten-a-list-of-lists-in-python/

Verwandte Themen