2016-10-10 3 views
0

Ich versuche, das Auftreten jedes Zeichens für eine bestimmte Zeichenfolge eingeben, die Vorkommen müssen in aufsteigender Reihenfolge ausgegeben werden (enthält Zahlen und Ausrufezeichen) Ich habe dies für meinen Code bisher, ich bin mir der Counter-Funktion bewusst, aber es gibt die Antwort nicht in dem Format aus, das ich möchte, und ich weiß nicht, wie man Counter formatiert. Stattdessen versuche ich weg zu finden, um das count() zu verwenden, um jedes Zeichen zu zählen. Ich habe auch die Wörterbuchfunktion gesehen, aber ich würde hoffen, dass es ein einfacherer Weg, ist es mit dem Grafen zu tun()Anzahl der Vorkommen eines Zeichen in einer Zeichenfolge (Liste) zählen

from collections import Counter 

sentence=input("Enter a sentence b'y: ") 
lowercase=sentence.lower() 

list1=list(lowercase) 
list1.sort() 

length=len(list1) 
list2=list1.count(list1) 
print(list2) 

p=Counter(list1) 
print(p) 
+1

Können Sie erklären, was Ausgang Sie genau suchen, wo Zähler genügten nicht? – idjaw

+0

Was genau, denkst du, list1.count (list1) 'tut? – TigerhawkT3

+0

Wissen Sie, dass 'Counter' praktisch ein Wörterbuch ist? Sie können es einfach nach Anzahl sortieren, indem Sie 'sorted_words = sortierte (p.items(), key = lambda item: item [1], reverse = True)'. Sie können das mit 'print ('\ n'.join ('% 10s:% 5d '% item für Element in sorted_words))' 'drucken. Beachten Sie, dass Sie mit "count" immer noch sortieren müssen. – MisterMiyagi

Antwort

-1

Eine Möglichkeit, dies durch Entfernen von Instanzen Ihrer Unter Zeichenfolge zu tun wäre, und bei der Länge der Suche ...

alternativ Sie re oder reguläre Ausdrücke verwenden könnte,

from re import * 
def nofsub(s,ss): 
    return(len(findall(compile(ss), s))) 

schließlich Sie sie manuell zählen konnte,

def nofsub(s,ss): 
    return(len([k for n,k in enumerate(s) if s[n:n+len(ss)]==ss])) 

-Test eine der drei mit ...

>>> nofsub("asdfasdfasdfasdfasdf",'asdf') 
5 

Nun, da Sie beliebige Zeichen zählen können Sie Ihre Zeichenfolge die durch einzigartige Charaktere laufen kann und einen Zähler für jeden einzigartigen Charakter anwenden Sie. Sortiere und drucke das Ergebnis.

def countChars(s): 
    s = s.lower() 
    d = {} 
    for k in set(s): 
     d[k]=nofsub(s,k) 
    for key, value in sorted(d.iteritems(), key=lambda (k,v): (v,k)): 
     print "%s: %s" % (key, value) 
+1

Verwenden Sie einfach 'Counter'. Dies ist sehr überentwickelt. –

+1

Es gibt auch nichts über die Anzahl der Teilstrings in der Frage. –

0

Ihre beste Wette ist Counter zu verwenden (die Arbeit an einer Schnur der Fall ist) und dann sortieren auf ist es ausgegeben.

from collections import Counter 
sentence = input("Enter a sentence b'y: ") 
lowercase = sentence.lower() 

# Counter will work on strings 
p = Counter(lowercase) 
count = Counter.items() 
# count is now (more or less) equivalent to 
# [('a', 1), ('r', 1), ('b', 1), ('o', 2), ('f', 1)] 

# And now you can run your sort 
sorted_count = sorted(count) 
# Which will sort by the letter. If you wanted to 
# sort by quantity, tell the sort to use the 
# second element of the tuple by setting key: 

# sorted_count = sorted(count, key=lambda x:x[1]) 

for letter, count in sorted_count: 
    # will cycle through in order of letters. 
    # format as you wish 
    print(letter, count) 
+2

'key = Lambda x: x [0]' tut hier eigentlich nichts, da Tupel bereits "lexikografisch" sortiert sind. Außerdem glaube ich, dass das OP in aufsteigender Reihenfolge sortieren will, basierend auf den * counts *, also 'lambda x: x [1]', aber es ist nicht klar. –

+0

Ja, du hast Recht. Vielen Dank. – SCB

0

Wenn Sie wollen einfach nur anders die Zählerausgabe zu formatieren:

for key, value in Counter(list1).items(): 
    print('%s: %s' % (key, value)) 
+0

Sie haben nach der Ausgabe in aufsteigender Reihenfolge gefragt – SCB

+0

In aufsteigender Reihenfolge nach Zeichenwert oder nach Anzahl der Vorkommen? –

-3

Sie über die Listenfunktion könnten die Worte apart`from Sammlungen

from collections import Counter 

sentence=raw_input("Enter a sentence b'y: ") 
lowercase=sentence.lower() 

list1=list(lowercase) 
list(list1) 

length=len(list1) 
list2=list1.count(list1) 
print(list2) 

p=Counter(list1) 
print(p) 
+0

Es tut mir leid, aber unterscheidet sich das von dem, was sie bereits hatten? – SCB

1

Rufen .most_common und brechen reverse die Ausgabe mit reversed, um die Ausgabe von am wenigsten zu am häufigsten:

from collections import Counter 

sentence= "foobar bar" 
lowercase = sentence.lower() 
for k, count in reversed(Counter(lowercase).most_common()): 
    print(k,count) 
1

collections.Counter Objekte stellen eine most_common() Methode, die eine Liste von Tupeln in abnehm Frequenz zurückkehrt. Also, wenn Sie es in ansteigender Frequenz wollen, kehren Sie die Liste:

from collections import Counter 

sentence = input("Enter a sentence: ") 
c = Counter(sentence.lower()) 
result = reversed(c.most_common()) 
print(list(result)) 

Demo läuft

 
Enter a sentence: Here are 3 sentences. This is the first one. Here is the second. The end! 
[('a', 1), ('!', 1), ('3', 1), ('f', 1), ('d', 2), ('o', 2), ('c', 2), ('.', 3), ('r', 4), ('i', 4), ('n', 5), ('t', 6), ('h', 6), ('s', 7), (' ', 14), ('e', 14)] 
+0

Warum umgekehrt verwenden, wenn Sie 'c.most_common() [:: - 1]'? reversed ist nur dann sinnvoll, wenn Sie über die Elemente iterieren und keine Kopie nach meiner eigenen Antwort erstellen wollen. –

+0

@PadraicCunningham: 'reversed()' ist besser lesbar. Aber ja, zu illustrativen Zwecken dieser Antwort macht es eine unnötige Kopie. – mhawke

0

Eine weitere Möglichkeit, mit Zählern zu vermeiden.

sentence = 'abc 11 222 a AAnn zzz?? !' 
list1 = list(sentence.lower()) 
#If you want to remove the spaces. 
#list1 = list(sentence.replace(" ", "")) 

#Removing duplicate characters from the string 
sentence = ''.join(set(list1)) 
dict = {} 
for char in sentence: 
    dict[char] = list1.count(char) 

for item in sorted(dict.items(), key=lambda x: x[1]): 
    print 'Number of Occurences of %s is %d.' % (item[0], item[1]) 

Ausgang:

Number of Occurences of c is 1. 
Number of Occurences of b is 1. 
Number of Occurences of ! is 1. 
Number of Occurences of n is 2. 
Number of Occurences of 1 is 2. 
Number of Occurences of ? is 2. 
Number of Occurences of 2 is 3. 
Number of Occurences of z is 3. 
Number of Occurences of a is 4. 
Number of Occurences of is 6. 
Verwandte Themen