Auswahl einzelner bestimmter Elemente einer List

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

Hi

mal ne (hoffentlich) Grundlagenfrage.

Ich habe ne List mit 10 Zahlen

x = [1,2,3,4,5,6,7,8,9,0]

und möchte jetzt eine Sublist davon,

sublist = [1,4,7,9]

kann mir einer den Befehl dazu nennen?
bzw. gibt es den überhaupt oder muss ich dafür ne extra Funktion schreiben?
Zuletzt geändert von smith0815 am Mittwoch 13. Juli 2011, 08:25, insgesamt 1-mal geändert.
lunar

@smith0815: Wenn Du nicht sagst, nach welchem Kriterium die Elemente ausgewählt werden sollen, kann man Dir nicht helfen.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

es gibt kein Kriterium in dem Sinne (nur Zahlen die durch 2 teilbar sind)

Ich möchte eine Liste angeben mit den Feldnummer die ich haben möchte und
raus kommt eine Subliste, welche nur die gewünschten Felder enthält
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

oder nehmen wir ein Beispiel.

Ich möchte aus der oben genannten Liste
- die Felder 0 - exkl. 4
- Feld 6
- Feld 8
- Feld 9
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

smith0815 hat geschrieben:es gibt kein Kriterium in dem Sinne (nur Zahlen die durch 2 teilbar sind)
Von 1, 4, 7 und 9 ist genau eine Zahl durch zwei teilbar ;-)
smith0815 hat geschrieben:Ich möchte eine Liste angeben mit den Feldnummer die ich haben möchte und
raus kommt eine Subliste, welche nur die gewünschten Felder enthält
Dann zeige doch mal vorhandenen Code. Es ist ja nicht so schwer eine Liste mit Indizes zu schreiben und eine for-Schleife welche diese abarbeitet.
Das Leben ist wie ein Tennisball.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Um dein erstes Beispiel aufzugreifen. Wenn du weißt welche Indizes dich interessieren, könntest du es so lösen:

Code: Alles auswählen

In [1]: x = [1,2,3,4,5,6,7,8,9,0]

In [2]: sublist = [v for (i,v) in enumerate(x) if i in [0,3,6,8]]

In [3]: sublist
Out[3]: [1, 4, 7, 9]
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

ich meinte ja kein Kriterium, wie nur Zahlen die durch 2 teilbar sind.

Code gibt es keinen, es sind nur Experiemente
Ich suche einfach eine einfache Möglichkeit
aus einer Liste
x = [1,2,3,4,5,6,7,8,9,0]
nur bestimmte Felder zu extrahieren ohne gleich
eine Funktion schreiben zu müssen (nicht gleich kompliziert denken)

In etwa wie
y = x[(0:4,,6,8,9)] oder
y = sublist(x, (0,1,2,3,6,8,9))
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

da war jemand schneller als ich
ok Danke
das ist es
BlackJack

@Zap: Wenn Du eine Liste mit den Indizes hast, kannst Du auch *die* abarbeiten und nur die Elemente aus `x` holen, die Dich interessieren, statt *alle* anzuschauen und dann auch noch für jedes in linearer Zeit zu testen ob der Index überhaupt interessant ist:

Code: Alles auswählen

In [54]: xs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

In [55]: [xs[i] for i in [0, 3, 6, 8]]
Out[55]: [1, 4, 7, 9]
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

is ja noch besser
Danke
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

BlackJack hat geschrieben:@Zap: Wenn Du eine Liste mit den Indizes hast, kannst Du auch *die* abarbeiten und nur die Elemente aus `x` holen, die Dich interessieren, statt *alle* anzuschauen und dann auch noch für jedes in linearer Zeit zu testen ob der Index überhaupt interessant ist:

Code: Alles auswählen

In [54]: xs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

In [55]: [xs[i] for i in [0, 3, 6, 8]]
Out[55]: [1, 4, 7, 9]
:roll: sowas einfaches wollte mir nicht einfallen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Damit wir filter nich vergessen - also fuer den Fall, dass es tatsaechlich ein Kriterium gibt:

Code: Alles auswählen

In [2]: filter(lambda x: x %2 == 0, range(20))
Out[2]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Antworten