Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Idee, die Wortzahl in Python zu zählen

Ausführliche Erläuterung der Idee, die Wortzahl in Python zu zählen

不言
不言Original
2018-05-08 16:18:492848Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Idee des Zählens der Wortanzahl in Python vor. Der Artikel bietet Ihnen auch eine Lösung ohne Verwendung von Modulen von Drittanbietern.

Problembeschreibung:

Verwenden Sie Python, um die Funktion count_words() zu implementieren. Diese Funktion gibt eine Zeichenfolge s und eine Zahl n ein und gibt die n am häufigsten vorkommenden Wörter in s zurück . Der Rückgabewert ist eine Liste von Tupeln, einschließlich der n Wörter mit den häufigsten Vorkommen und ihrer Häufigkeit, also [(3eeb61858e67fe2c766f6a2963ef7be9, 824a12f8eceff614c2d47321fd23ca32), (262fc3dea96bff548f487caec9a03150,

Sie können davon ausgehen, dass alle Eingaben in Kleinbuchstaben erfolgen und keine Satzzeichen oder andere Zeichen enthalten (nur Buchstaben und ein einzelnes Leerzeichen). Bei gleicher Anzahl an Vorkommen werden diese in alphabetischer Reihenfolge geordnet.

Zum Beispiel:

print count_words("betty bought a bit of butter but the butter was bitter",3)

Ausgabe:

[('butter', 2), (' a ', 1), ('betty', 1)]

Ideen zur Lösung des Problems:

1 Die Zeichenfolge s führt eine Leerraumaufteilung durch, um alle geteilten Wortlisten zu erhalten, z. B.: ['betty', 'bought', 'a', 'bit', 'of', 'butter', 'but', 'the', ' butter', 'was', 'bitter']

2. Erstellen Sie eine Maplist und konvertieren Sie split_s in eine Liste, deren Elemente Tupel sind, wie zum Beispiel: [('betty', 1), ('gekauft', 1) , ('a', 1), ('bit', 1), ('von', 1), ('butter', 1), ('aber', 1), ('the', 1) , ( 'butter', 1), ('was', 1), ('bitter', 1)]

3. Füge die Elemente in der Maplist zusammen gleich, dann ist der erste Indexwert des Tupels derselbe. Die beiden Indexwerte werden addiert.

// Hinweis: Bereiten Sie sich auf die Verwendung von defaultdict vor. Die erhaltenen Daten lauten wie folgt: {'betty': 1, 'gekauft': 1, 'a': 1, 'bit': 1, 'von': 1, 'butter': 2, 'aber': 1, 'the': 1, 'was': 1, 'bitter': 1}

4. Sortieren Sie alphabetisch nach Schlüssel und erhalten Sie Folgendes: [('a', 1), ('betty', 1 ), ('bit', 1), ('bitter', 1), ('gekauft', 1), ('aber', 1), ('Butter', 2), ('von', 1) , ('the', 1), ('was', 1)]

5. Führen Sie eine sekundäre Sortierung durch, sortieren Sie nach Wert und erhalten Sie Folgendes: [('butter', 2), ('a ' , 1), ('betty', 1), ('bit', 1), ('bitter', 1), ('gekauft', 1), ('aber', 1), ('von', 1 ), ('the', 1), ('was', 1)]

6. Verwenden Sie Slicing, um *Datengruppen mit höherer Häufigkeit zu extrahieren

Zusammenfassung: Nicht verfügbar auf Python3 Sortierergebnisse von defaultdict sind ebenfalls korrekt, aber nicht korrekt auf Python2. defaultdict selbst hat keine Reihenfolge. Um die Liste zu unterscheiden, muss sie sortiert werden.

Sie können auch versuchen, es selbst zu schreiben, ohne Module von Drittanbietern zu verwenden

Lösung 1 (Defaultdict verwenden):

from collections import defaultdict
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  map_list = [(k,1) for k in split_s]
  output = defaultdict(int)
  for d in map_list:
    output[d[0]] += d[1]
  output1 = dict(output)
  top_n = sorted(output1.items(), key=lambda pair:pair[0], reverse=False)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

Lösung 2 (Zähler verwenden)

from collections import Counter
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  split_s = Counter(name for name in split_s)
  print(split_s)
  top_n = sorted(split_s.items(), key=lambda pair:pair[0], reverse=False)
  print(top_n)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  print(top_n)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

Verwandte Empfehlungen:

Python-Implementierung zur Berechnung des Werts von pi Beispiel für eine Bit-Methode mit beliebigem Wert

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Idee, die Wortzahl in Python zu zählen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn