Ich benutze Python 3.3
Ich muss zwei Listen erstellen, eine für die eindeutigen Wörter und die andere für die Häufigkeit des Wortes.
Ich muss die eindeutige Wortliste anhand der Häufigkeitsliste sortieren, damit das Wort mit der höchsten Häufigkeit an erster Stelle in der Liste steht.
Ich habe das Design im Text, bin mir aber nicht sicher, wie ich es in Python implementieren soll.
Die Methoden, die ich bisher gefunden habe, verwenden entweder Counter
Wörterbücher oder Wörterbücher, die wir nicht gelernt haben. Ich habe die Liste bereits aus der Datei erstellt, die alle Wörter enthält, weiß jedoch nicht, wie die Häufigkeit der einzelnen Wörter in der Liste ermittelt werden soll. Ich weiß, dass ich dazu eine Schleife brauche, kann es aber nicht herausfinden.
Hier ist das grundlegende Design:
original list = ["the", "car",....]
newlst = []
frequency = []
for word in the original list
if word not in newlst:
newlst.append(word)
set frequency = 1
else
increase the frequency
sort newlst based on frequency list
set
? diecount
Methode der Listen? usw. Banden Sie das Problem in sinnvollen Begriffen.Antworten:
benutze das
from collections import Counter list1=['apple','egg','apple','banana','egg','apple'] counts = Counter(list1) print(counts) # Counter({'apple': 3, 'egg': 2, 'banana': 1})
quelle
Sie können verwenden
from collections import Counter
Es unterstützt Python 2.7. Weitere Informationen finden Sie hier
1.
>>>c = Counter('abracadabra') >>>c.most_common(3) [('a', 5), ('r', 2), ('b', 2)]
benutze dict
>>>d={1:'one', 2:'one', 3:'two'} >>>c = Counter(d.values()) [('one', 2), ('two', 1)]
Sie müssen jedoch zuerst die Datei lesen und in Dikt konvertieren.
2. Es ist das Beispiel für Python-Dokumente. Verwenden Sie re und Counter
# Find the ten most common words in Hamlet >>> import re >>> words = re.findall(r'\w+', open('hamlet.txt').read().lower()) >>> Counter(words).most_common(10) [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631), ('you', 554), ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
quelle
words = file("test.txt", "r").read().split() #read the words into a list. uniqWords = sorted(set(words)) #remove duplicate words and sort for word in uniqWords: print words.count(word), word
quelle
Counter
. Sie werfen die Zählungen unnötig weg, wenn Sie dies tunset(words)
, und müssen dann jedes Mal, wenn Sie die Zählungen benötigen, nachschlagenwords.count(word)
, was insbesondere ineffizient ist. für große Texte.Noch eine Lösung mit einem anderen Algorithmus ohne Verwendung von Sammlungen:
def countWords(A): dic={} for x in A: if not x in dic: #Python 2.7: if not dic.has_key(x): dic[x] = A.count(x) return dic dic = countWords(['apple','egg','apple','banana','egg','apple']) sorted_items=sorted(dic.items()) # if you want it sorted
quelle
Pandas Antwort:
import pandas as pd original_list = ["the", "car", "is", "red", "red", "red", "yes", "it", "is", "is", "is"] pd.Series(original_list).value_counts()
Wenn Sie es stattdessen in aufsteigender Reihenfolge haben möchten, ist es so einfach wie:
pd.Series(original_list).value_counts().sort_values(ascending=True)
quelle
Eine Möglichkeit wäre, eine Liste von Listen zu erstellen, wobei jede Unterliste in der neuen Liste ein Wort und eine Anzahl enthält:
list1 = [] #this is your original list of words list2 = [] #this is a new list for word in list1: if word in list2: list2.index(word)[1] += 1 else: list2.append([word,0])
Oder effizienter:
for word in list1: try: list2.index(word)[1] += 1 except: list2.append([word,0])
Dies wäre weniger effizient als die Verwendung eines Wörterbuchs, verwendet jedoch grundlegendere Konzepte.
quelle
Sie können redu () verwenden - eine funktionale Methode.
words = "apple banana apple strawberry banana lemon" reduce( lambda d, c: d.update([(c, d.get(c,0)+1)]) or d, words.split(), {})
kehrt zurück:
{'strawberry': 1, 'lemon': 1, 'apple': 2, 'banana': 2}
quelle
Die Verwendung von Counter wäre der beste Weg, aber wenn Sie dies nicht möchten, können Sie es selbst auf diese Weise implementieren.
# The list you already have word_list = ['words', ..., 'other', 'words'] # Get a set of unique words from the list word_set = set(word_list) # create your frequency dictionary freq = {} # iterate through them, once per unique word. for word in word_set: freq[word] = word_list.count(word) / float(len(word_list))
freq wird mit der Häufigkeit jedes Wortes in der Liste enden, die Sie bereits haben.
Sie müssen
float
dort eine der Ganzzahlen in einen Float konvertieren, sodass der resultierende Wert ein Float ist.Bearbeiten:
Wenn Sie kein Diktat oder Set verwenden können, gibt es einen anderen, weniger effizienten Weg:
# The list you already have word_list = ['words', ..., 'other', 'words'] unique_words = [] for word in word_list: if word not in unique_words: unique_words += [word] word_frequencies = [] for word in unique_words: word_frequencies += [float(word_list.count(word)) / len(word_list)] for i in range(len(unique_words)): print(unique_words[i] + ": " + word_frequencies[i])
Die Angaben von
unique_words
undword_frequencies
werden übereinstimmen.quelle
Der ideale Weg ist, ein Wörterbuch zu verwenden, das ein Wort seiner Anzahl zuordnet. Wenn Sie dies jedoch nicht verwenden können, möchten Sie möglicherweise zwei Listen verwenden - eine, in der die Wörter gespeichert sind, und die andere, in der die Anzahl der Wörter gespeichert ist. Beachten Sie, dass hier die Reihenfolge der Wörter und Zählungen von Bedeutung ist. Dies umzusetzen wäre schwierig und nicht sehr effizient.
quelle
Versuche dies:
words = [] freqs = [] for line in sorted(original list): #takes all the lines in a text and sorts them line = line.rstrip() #strips them of their spaces if line not in words: #checks to see if line is in words words.append(line) #if not it adds it to the end words freqs.append(1) #and adds 1 to the end of freqs else: index = words.index(line) #if it is it will find where in words freqs[index] += 1 #and use the to change add 1 to the matching index in freqs
quelle
Hier ist Codeunterstützung Ihre Frage is_char () prüft, ob die Anzahl der Zeichenfolgen überprüft wird. Hashmap ist ein Wörterbuch in Python
def is_word(word): cnt =0 for c in word: if 'a' <= c <='z' or 'A' <= c <= 'Z' or '0' <= c <= '9' or c == '$': cnt +=1 if cnt==len(word): return True return False def words_freq(s): d={} for i in s.split(): if is_word(i): if i in d: d[i] +=1 else: d[i] = 1 return d print(words_freq('the the sky$ is blue not green'))
quelle
das beste zu tun ist :
def wordListToFreqDict(wordlist): wordfreq = [wordlist.count(p) for p in wordlist] return dict(zip(wordlist, wordfreq))
dann versuchen Sie:
wordListToFreqDict(originallist)
quelle