2016-10-10 116 views
0

我试图为任何给定的字符串输入计算每个字符的出现次数,出现次数必须以升序输出(包括数字和感叹号) 我的代码到目前为止,我知道的计数器功能,但它不会输出我想要的格式的答案,我不知道如何格式化计数器。相反,我试图找到使用count()来计算每个字符。我也看到了词典功能,但我很希望有一个更简单的方法以计数()做如何统计字符串(列表)中字符的出现次数

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

你能解释一下你在找什么输出准确,在计数器并不足以? – idjaw

+0

什么,你觉得'list1。count(list1)'呢? – TigerhawkT3

+0

您是否知道“计数器”实际上是一本字典?你可以很容易地通过count来进行排序。sort_words = sorted(p.items(),key = lambda item:item [1],reverse = True)'。您可以使用print('\ n'.join('sorted_words'中的'%10s:%5d'%item)')来打印。请注意,使用'count'仍然需要您进行排序。 – MisterMiyagi

回答

-1

一种方式做,这将是您去除串子的实例和看长...

另外,您可以重新使用或正则表达式,

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

最后你可以手动指望他们,

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

测试的任何三个与...

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

现在,你可以指望任何给定的字符,你可以通过你的字符串的唯一的字符进行迭代,并申请一个计数器,每个唯一的字符,你找到。然后分类并打印结果。

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

只需使用'计数器'。这是非常过分设计的。 –

+1

另外,问题中没有关于子字符串的数目。 –

0

最好的办法是使用Counter(它在一根绳子上的工作),然后排序上它的输出。

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]'在这里并没有做任何事情,因为元组已经按照“字典顺序”排序。另外,我相信OP希望根据* counts *进行升序排序,所以'lambda x:x [1]',但不清楚。 –

+0

是的,你说得对。谢谢。 – SCB

0

如果你只是想以不同的格式计数器输出:

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

他们要求输出为升序 – SCB

+0

按字符值升序排列或按出现次数排序? –

-3

您可以使用列表功能突破的话apart`from收藏

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

我很抱歉,但是这与他们已有的不同? – SCB

1

只要打电话.most_common和用reversed反转输出以获得最少至最常见的输出:

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对象提供一个most_common()方法,返回在降低频率元组的列表。所以,如果你想在升频,反向名单:

from collections import Counter 

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

演示运行

 
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

为什么在可以'c.most_common()[:: - 1]'时使用反转?如果您正在迭代元素并且不想根据自己的答案创建副本,则反转实际上才有用。 –

+0

@PadraicCunningham:'reversed()'更具可读性。但是,是的,为了说明这个答案,它确实做了一个不必要的副本。 – mhawke

0

另一种方法来避免使用计数器。

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]) 

输出:

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. 
相关问题