Python: Warum haben Listen keine Suchmethode?

8

Ich habe versucht, eine Antwort zu diesem question und war ziemlich überrascht herauszufinden, dass es keine find-Methode für Listen gibt, Listen haben nur die index-Methode (Strings haben find und index).

Kann mir jemand die Gründe dafür sagen? Warum haben Strings beides?

    
ChessMaster 03.10.2010, 07:25
quelle

3 Antworten

7

Ich weiß nicht warum oder vielleicht ist irgendwo in irgendeinem PEP begraben, aber ich kenne 2 sehr grundlegende "Finde" -Methode für Listen, und sie sind array.index() und der in -Operator. Sie können immer diese 2 verwenden, um Ihre Artikel zu finden. (Auch, re Modul, etc)

    
ghostdog74 03.10.2010 07:28
quelle
3
___ qstnhdr ___ Python: Warum haben Listen keine Suchmethode? ___ answer3848964 ___

Ich weiß nicht warum oder vielleicht ist irgendwo in irgendeinem PEP begraben, aber ich kenne 2 sehr grundlegende "Finde" -Methode für Listen, und sie sind %code% und der %code% -Operator. Sie können immer diese 2 verwenden, um Ihre Artikel zu finden. (Auch, re Modul, etc)

    
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ antwort12224174 ___

Ich denke, die Gründe dafür, getrennte Such- und Indexmethoden zu verwenden, sind nicht unterschiedlich genug. Beide würden dasselbe zurückgeben, wenn das gesuchte Element in der Liste vorhanden ist (dies gilt für die beiden String-Methoden); Sie unterscheiden sich, wenn das gesuchte Element nicht in der Liste / Zeichenfolge enthalten ist. Sie können jedoch trivial entweder einen der find / index von dem anderen erstellen. Wenn Sie aus anderen Sprachen kommen, scheint es schlechte Manieren zu sein, Ausnahmen für eine Nicht-Fehler-Bedingung zu erzeugen und abzufangen, aber in Python wird es oft als pythisch angesehen, zuerst zu schießen und danach Fragen zu stellen , um die Ausnahmebehandlung anstelle von Tests wie diesem zu verwenden (Beispiel: Besser, etwas 'zu versuchen' und die Ausnahme abfangen oder testen, ob es möglich ist, zuerst eine Ausnahme zu vermeiden? ).

Ich denke nicht, dass es eine gute Idee ist, "find" aus "index" und "in" zu bauen, wie

%Vor%

weil sowohl in als auch index einen O (n) Durchlauf über die Liste erfordern.

Lieber "Finden" aus "Index" und versuchen / fangen, wie:

%Vor%

Nun, warum liste auf diese Weise (mit nur Index) erstellt wurde, und string wurde anders gebaut (mit separatem Index und find) ... kann ich nicht sagen.

    
___ tag123list ___ Liste kann sich beziehen auf: eine verkettete Liste (eine geordnete Menge von Knoten, die jeweils auf ihren Nachfolger verweisen) oder eine Form eines dynamischen Arrays. Um nicht für HTML-Listen verwendet zu werden, verwenden Sie stattdessen [html-lists]. ___ tag123methods ___ Eine Methode (oft als Funktion, Routine oder Prozedur bezeichnet) ist Code, der eine Aufgabe ausführt und einer Klasse oder einem Objekt zugeordnet ist. ___ qstntxt ___

Ich habe versucht, eine Antwort zu diesem question und war ziemlich überrascht herauszufinden, dass es keine find-Methode für Listen gibt, Listen haben nur die index-Methode (Strings haben find und index).

Kann mir jemand die Gründe dafür sagen? Warum haben Strings beides?

    
___ answer3848988 ___

Die Methode "find" für Listen ist %code% .

Ich halte die Inkonsistenz zwischen %code% und %code% sowohl im Namen als auch im Verhalten für unglücklich: %code% gibt -1 zurück, wenn keine Übereinstimmung gefunden wird, wobei %code% ValueError auslöst. Dies hätte konsequenter gestaltet werden können. Der einzige unüberbrückbare Unterschied zwischen diesen Operationen besteht darin, dass %code% nach einer Reihe von Elementen sucht, wobei %code% nach genau einem Element sucht (was allein die Verwendung anderer Namen nicht rechtfertigt).

    
___
metamatt 01.09.2012 01:25
quelle
2

Die Methode "find" für Listen ist index .

Ich halte die Inkonsistenz zwischen string.find und list.index sowohl im Namen als auch im Verhalten für unglücklich: string.find gibt -1 zurück, wenn keine Übereinstimmung gefunden wird, wobei list.index ValueError auslöst. Dies hätte konsequenter gestaltet werden können. Der einzige unüberbrückbare Unterschied zwischen diesen Operationen besteht darin, dass string.find nach einer Reihe von Elementen sucht, wobei list.index nach genau einem Element sucht (was allein die Verwendung anderer Namen nicht rechtfertigt).

    
Glenn Maynard 03.10.2010 07:36
quelle

Tags und Links