Suche ein Tupel Liste mit den wildcards?
wie kann ich suchen eine Liste von Tupeln, wenn ich nur weiß, 1 element der Tupel in der Liste?
mockup Beispiel (das nicht funktioniert):
tuplelist = [('cat', 'dog'), ('hello', 'goodbye'), ('pretty', 'ugly')]
matchlist = []
searchstring = 'goodbye'
if (*, searchstring) in tuplelist:
print "match was found"
matchlist.append(tuplelist[#index of match])
den asterix wäre, wo ich die wildcard
Ich weiß, dass ich verwenden könnte:
for i in range (len(tuplelist)):
if tuplelist[i][1]==searchstring:
matchlist.append(tuplelist[i])
print "match was found"
aber das problem ist, dass ich brauche, um eine bestimmte Funktion nur, wenn keine übereinstimmung gefunden wird.
vielleicht konnte ich einen Zähler, der inkrementiert, wenn eine übereinstimmung gefunden wird, und fügen Sie so etwas wie dies, um den loop.
if i==len(tuplelist) and matchcounter==0:
#do something
print "no match was found"
Aber das ist irgendwie hässlich und unübersichtlich und ich denke, ich bin sicher, es gibt einige Reiniger Weg, dies zu tun 😛
Deine Frage ist ein wenig verwirrend. Es ist nicht wirklich klar, was Ihre Anforderungen sind. In deinem ersten Beispiel hast du nur testen, wenn es eine übereinstimmung gibt, in Ihrem zweiten Beispiel, Sie tun etwas für jeden match.
Byers: Er erwähnt, dass ein problem mit seiner zweiten Beispiel unmittelbar nach es.
Vielleicht, aber es ist nicht klar, ob er einfach nur vergessen legen Sie eine break-Anweisung oder, falls das beabsichtigt war. Eine klare Beschreibung von dem, was er tatsächlich zu tun versuchen, mit einem Beispiel helfen würde, die Sache aufzuklären. Bisher gibt es vier Antworten, und jeder von Ihnen scheinen zu sein, die Beantwortung einer völlig anderen Frage. Ich denke, dass ist der Beweis, dass die Frage nicht klar genug in seiner jetzigen form.
sorry, wenn die Frage ist vage. Die fehlende break-Anweisungen absichtlich war. Ich Suche wollen nur das zweite element jedes Tupel in der Liste, und wenn eine übereinstimmung gefunden wird, möchte ich anfügen, dass Tupel eine zweite Liste, und halten Sie die Iteration, da könnte es mehr dann 1 Spiel. Aber wenn keine übereinstimmung gefunden wird, will ich führen eine andere Funktion, aber, wenn ich innen ein 'else' - Anweisung innerhalb der Schleife dann laufen würde, die "no match" - Funktion für jedes Element in der Liste.
Bitte nicht einen Kommentar auf Ihre Frage. Bitte update die Frage ganz klar sein. Es ist Ihre Frage. Sie können verbessern Sie es, so dass Sie jeder versteht es.
Byers: Er erwähnt, dass ein problem mit seiner zweiten Beispiel unmittelbar nach es.
Vielleicht, aber es ist nicht klar, ob er einfach nur vergessen legen Sie eine break-Anweisung oder, falls das beabsichtigt war. Eine klare Beschreibung von dem, was er tatsächlich zu tun versuchen, mit einem Beispiel helfen würde, die Sache aufzuklären. Bisher gibt es vier Antworten, und jeder von Ihnen scheinen zu sein, die Beantwortung einer völlig anderen Frage. Ich denke, dass ist der Beweis, dass die Frage nicht klar genug in seiner jetzigen form.
sorry, wenn die Frage ist vage. Die fehlende break-Anweisungen absichtlich war. Ich Suche wollen nur das zweite element jedes Tupel in der Liste, und wenn eine übereinstimmung gefunden wird, möchte ich anfügen, dass Tupel eine zweite Liste, und halten Sie die Iteration, da könnte es mehr dann 1 Spiel. Aber wenn keine übereinstimmung gefunden wird, will ich führen eine andere Funktion, aber, wenn ich innen ein 'else' - Anweisung innerhalb der Schleife dann laufen würde, die "no match" - Funktion für jedes Element in der Liste.
Bitte nicht einen Kommentar auf Ihre Frage. Bitte update die Frage ganz klar sein. Es ist Ihre Frage. Sie können verbessern Sie es, so dass Sie jeder versteht es.
InformationsquelleAutor Steinthor.palsson | 2010-12-30
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man dies tun:
beachten Sie, dass eine andere Art zu sagen ist: jedes(t[1] == searchstring für t in tuplelist)
InformationsquelleAutor Mark Byers
Ich bin erstaunt, dass niemand wirklich darauf hingewiesen, noch, und das ist eine ziemlich alte Frage, aber das überlasse ich hier den Fall, dass jemand stolperte über dieses wie ich.
Es ist ein für...else-Konstrukt in Python nur für diesen Anwendungsfall. Sie können dies tun(ich werde Mark Byers' code und ändern Sie es):
Wird der else-Abschnitt wird nur durchgeführt, wenn die Schleife beendet normal(keine Pausen).
InformationsquelleAutor Farhad Alizadeh Noori
Könnte man eine Liste Verständnis zu erzeugen, wird eine neue Liste nur die Elemente, die Sie interessieren. Zum Beispiel:
Dieser nimmt die Liste von Tupeln, und erstellt die Liste (eigentlich ein generator-Ausdruck), enthält nur den zweiten Elemente aus jedem Tupel; dann prüft es, den such-string für die Mitgliedschaft in dieser neuen Liste.
InformationsquelleAutor Adam Rosenfield
Ich denke Sie zu tun versuchen teilweise bestellt matching;
im folgenden wird None als wildcard:
gibt
InformationsquelleAutor Hugh Bothwell
InformationsquelleAutor Apalala
Getan. Keine Aufregung, kein muss. Sie versuchen zu hart, um Dinge zu tun die Weise, die Sie tun würde, Sie in imperativen Sprachen. Aufhören zu versuchen, zu sagen, Python, wie Sie Dinge tun und sagen, was zu tun ist.
... So überprüfen Sie die Liste danach: wenn es leer ist, dann wurde keine übereinstimmung gefunden. Was ist das problem?
InformationsquelleAutor Karl Knechtel