EDIT
für jede Wortlänge Einzelne zählt erzeugen Sie eine collections.Counter
verwenden können:
from collections import Counter
def word_lengths(f):
for line in f:
for word in line.split(): # does not ignore punctuation
yield len(word)
with open('words.txt') as fin:
counts = Counter(length for length in word_lengths(fin) if length <= 20)
die Datei Dieser verwendet einen Generator zu lesen und eine Folge von Wortlängen zu erzeugen. Die gefilterten Wortlängen werden in einen Counter
eingespeist. Sie können stattdessen die Längenfilterung auf dem Counter
durchführen.
Wenn Sie Interpunktion ignorieren möchten, können Sie mit str.translate()
unerwünschte Zeichen entfernen, oder möglicherweise re.split(r'\W+', line)
anstelle von line.split()
.
es so versuchen:
with open('words.txt') as fin:
counter = 0
for line in fin:
for word in line.split():
if len(word) <= 20:
counter = counter + 1
print counter,
Dies vereinfacht werden könnte:
with open('words.txt') as fin:
counter = sum([1 for line in fin
for word in line.split() if len(word) <= 20])
aber das spielt Code Golf.
Sie können auch eine collections.Counter
verwenden, wenn es die gesamte Datei in den Speicher zu lesen praktisch ist:
from collections import Counter
with open('words.txt') as fin:
c = Counter(fin.read().split())
counter = sum(c[k] for k in c if len(k) <= 20)
Und kein Zweifel, es gibt viele andere Möglichkeiten, es zu tun. Keines der oben genannten Elemente erwartet Interpunktionszeichen oder behandelt sie.
Die Programmlogik ist vollständig nach hinten. Statt über die Datei zu iterieren und nach Wörtern mit 20 Zeichen zu suchen, iterieren Sie 20 Mal über die Datei. –
Suchen Sie nach einer Nummer (Anzahl der Wörter bis zu 20 Zeichen) oder 20 Zahlen (pro mögliche Länge, wie viele Wörter gibt es)? – Mureinik
Suche nach 20 Zahlen, was bedeutet, dass die erste Zahl ist die Anzahl der Wörter in der Datei mit 1 Buchstaben, die zweite Zahl ist die Anzahl der Wörter mit 2 Buchstaben usw. – Jonathan