Ein Wort auf bestimmte Buchstaben untersuchen

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
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Hallo Leute,
ich habe folgendes Problem, ich habe eine Liste von Worten und einen Satz von Buchstaben. Nun möchte ich alle Worte aus meiner Liste haben, die in unbestimmter Reihenfolge die Buchstaben enthalten.
Beispiel:

liste ['Hallo','das','ist','ein','Test']
Buchstabe(n) s

dabei sollten alle Worte gefunden werden die ein s enthalten.

liste ['Hallo','das','ist','ein','Test']
Buchstabe(n) s a

Hier sollte nur 'das' gefunden werden.

Ich bin mir ziemlich sicher, dass man das mit regulären Ausdrücken machen kann.
Davon hab ich aber leider wenig bis keine Ahnung.
Ihr braucht mir nicht unbedingt die Lösung aufschreiben (wäre aber nett ;) ) eine Tipp was ich mir besonders angucken sollte würde reichen!

Danke und Gruß
hardez
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Ups, falsch die Beschreibung gelesen^^
Aber unten steht ja schon die Lösung ;-)
Zuletzt geändert von ms4py am Sonntag 20. Juni 2010, 09:56, insgesamt 2-mal geändert.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

>>> a = ['Hallo','das','ist','ein','Test']
>>> [elem for elem in a if "s" in elem]
['das', 'ist', 'Test']
>>> [elem for elem in a if all(("s" in elem, "a" in elem))]
['das']
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Code: Alles auswählen

worte = ['Hallo','das','ist','ein','Test']
buchstabe = 's'
print [i for i in worte if buchstabe in i]

buchstaben = 'sa'
elemente = set(worte)
for buchstabe in buchstaben:
     elemente &= set([i for i in elemente if buchstabe in i])
print elemente
wie du siehst ist ein regulärer Ausdruck nicht nötig.
BlackJack

Code: Alles auswählen

In [1483]: xs = ['Hallo', 'das', 'ist', 'ein', 'Test']

In [1484]: a = set('sa')

In [1485]: [x for x in xs if a < set(x)]
Out[1485]: ['das']
Wenn man mag kann man da noch einmal ein `set()` drauf loslassen um Doubletten auszuschliessen.
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

sehr schnelle Antworten, danke schön, der Befehl is ja mal sehr kryptisch.
Aber vielen dank, is genau das was ich gesucht hab!
BlackJack

Kryptisch ist vielleicht das von `set` übeladene ``<``, aber das kann man auch als Methodennamen ausschreiben wenn man möchte:

Code: Alles auswählen

In [1488]: [x for x in xs if a.issubset(x)]
Out[1488]: ['das']
Ansonsten sind "list comprehensions" oder Generatorausdrücke Standardhandwerkzeuge in Python, die man zumindest erkennen und lesen können sollte.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Code: Alles auswählen

xs = ['Hallo', 'das', 'ist', 'ein', 'Test', 'as']
a = set('sa')
print [x for x in xs if a <= set(x)]
so wäre es ganz korrekt...
Antworten