2017-08-27 3 views
-1

Für die größeren und kleinere Diagonalen einer Matrix bekommen könnte ich verwenden:zwei verschiedene Listenkomprehensionen mit einem einzigen iterable

major, minor = list(
    map(list, zip(*([(row[i], row[-i - 1]) for i, row in enumerate(mat)])))) 

Aber, gibt es einen besseren (pythonic) Weg, um die Objekte in der Liste der Auswahl Verständnis, damit ich es später nicht umsetzen muss?

Auch kann es um die Schaffung weitere Listen erweitert werden (z. B. 3 separate Listen für int ‚s, strings und floats in einer Liste)?

+0

Ein Listenverständnis erzeugt immer ein einzelnes Listenobjekt, also nein, Sie können nicht nur ein Listenverständnis verwenden. –

+0

@MartijnPieters Nicht einmal als Tupel? – ArchKudo

+0

Das ergibt keinen Sinn. Ein Listenverständnis erzeugt Listen, keine Tupel. –

Antwort

0

Es gibt wirklich keine Notwendigkeit, zu solchen Längen zu gehen, um ein Listenverständnis zu verwenden. Es ist weniger lesbar, härter zu halten und nicht schneller als die Verwendung von zwei separaten Liste Comprehensions:

major = [row[i] for i, row in enumerate(mat)] 
minor = [row[-i] for i, row in enumerate(mat, 1)] 

Ja, der zip(*...) Trick kann eine beliebige Anzahl von Elementen aus einer Liste von Tupeln zu extrahieren verwendet werden, nur produzieren mehr Elemente im Tupel. Die Technik sollte jedoch nicht verwendet werden.

+0

Ich versuchte dies vorher und ich dachte, ich gäbe es eine Art von Doppelarbeit, die vermieden werden könnte, siehe meinen Code hier: https://gist.github.com/ArchKudo/1db4271ae42924f028306d56a277a1a2 Anyways, danke für die Hilfe! – ArchKudo

Verwandte Themen