2017-12-08 3 views
0

ich eine Funktion bin definieren, die die Anzahl der Zeiten sind XML zählt Tags in einer Zeichenfolge vorhanden, nämlich <> und </>. Obwohl ich in der Lage bin, die Strings "anzupassen", kann ich die Anzahl der Übereinstimmungen nicht quantifizieren, um eine numerische count zurückzugeben. Dies ist meine Funktion:Python 3.6 - Wie findet man Strings in einer for-Schleife?

def tag_count(the_string): 
    count = 0 
    for element in the_string: 
     if '<>' in the_string: 
      count += 1 
      return count 
     elif '</>' in the_string: 
      count += 1 
      return count 

Das Problem ist, dass für Strings, die sowohl <> und </> haben, count die Anzahl der Male zurückkehren sollte diese Tags während meiner Funktion abgestimmt sind nur count als 1 wegen der elif Zustand zurückkehrt . Ich habe versucht, and in der 3. Zeile einzufügen, aber das gibt mir einen Fehler. Wie summiere ich, wie oft diese Tags übereinstimmen?

+1

move 'return count' aus der for-Schleife –

+0

Ihre' return'-Anweisung befindet sich in Ihrer Schleife. Es gibt also "1" zurück, sobald es das erste Vorkommen gefunden hat. Verschieben Sie 'return' an das Ende, außerhalb der Schleife, um dies zu vermeiden. – MrT

+3

Beachten Sie, dass echte XML-Tags wie ' ...' oder '' aussehen und nicht '<>' oder ''. Sie benötigen eine andere Art des Abgleichs, um sie zu erfassen. Außerdem zählen Sie Open-Close-Tags als zwei Tags. Eine sinnvolle Implementierung würde wahrscheinlich auch prüfen, ob offene und schließende Tags zueinander passen. Dies würde einen Stapel erfordern. Für einen praktischen Zweck würde ich einen echten XML-Parser nehmen (der in Python enthalten ist) und die Nicht-Text-Knoten in der Baumstruktur rekursiv zählen. – 9000

Antwort

4

Sie kehren von der Funktion jedes Mal, wenn Sie einen Tag begegnen, das ist, warum es immer 1 ist können Sie auch die str.count() Methode verwenden:

def tag_count(source): 
    return source.count('<>') + source.count('</>') 

Beispiel Nutzung:

>>> tag_count('<> <> </> <> <>') 
5 
+0

genau! besser zu verwenden, was Python bereits bietet :) –

+0

Das ist Eleganz. –

+0

Was wäre, wenn die Zeichenfolge etwas wie '['', 'Foo!', ']' wäre. Wie würde das universelle Matching funktionieren? –

-3

Ich bin nicht vertraut mit Python, aber ich denke, Sie könnten <> und </> verwenden, um s zu teilen und die Länge des String-Arrays zu berechnen.

+2

Sie würden [eher nicht] (https://stackoverflow.com/a/1732454/223424). – 9000

Verwandte Themen