创建函数以计算字符串中字符的出现次数

时间:2018-02-27 11:07:30

标签: python python-3.x python-2.7

我想在字符串中出现字符,我得到了这段代码:

string = "Foo Fighters"
def conteo(string):
    copia = ''
    for i in string:
        if i not in copia:
            copia = copia + i
    conteo = [0]*len(copia)
    for i in string:
        if i in copia:
            conteo[copia.index(i)] = conteo[copia.index(i)] + 1
    out = ['0']*2*len(copia)
    for i in range(len(copia)):
        out[2*i] = copia[i]
        out[2*i + 1] = conteo[i]
    return (out)

我希望返回类似:['f', 2, 'o', 2, '', 1, 'i', 1, 'g', 1, 'h', 1, 't', 1, 'e', 1, 'r', 1, 's', 1]

的内容

我该怎么办?不使用python库

谢谢

3 个答案:

答案 0 :(得分:4)

根据您希望获得此信息的原因,一种方法可能是使用Counter

from collections import Counter
print(Counter("Foo Fighters"))

当然,要创建与请求完全相同的输出,也可以使用itertools:

from collections import Counter
from itertools import chain

c = Counter("Foo Fighters")
output = list(chain.from_iterable(c.items()))

>> ['F', 2, 'o', 2, ' ', 1, 'i', 1, 'g', 1, 'h', 1, 't', 1, 'e', 1, 'r', 1, 's', 1]

答案 1 :(得分:4)

使用Python Counter(标准库的一部分):

>>> str = 'foo fighters'
>>> from collections import Counter
>>> counter = Counter(str)
Counter({'f': 2, 'o': 2, ' ': 1, 'e': 1, 'g': 1, 'i': 1, 'h': 1, 's': 1, 'r': 1, 't': 1})
>>> counter['f']
2
>>>

答案 2 :(得分:0)

目前尚不清楚您是否想要对当前的尝试或pythonic解决方案进行批评。以下是输出是字典的一种方式。

from collections import Counter

mystr = "Foo Fighters"

c = Counter(mystr)

<强>结果

Counter({' ': 1,
         'F': 2,
         'e': 1,
         'g': 1,
         'h': 1,
         'i': 1,
         'o': 2,
         'r': 1,
         's': 1,
         't': 1})

以列表形式输出

我故意不在这个列表中组合元组,因为在绝对必要之前保持结构是个好主意。将这些组合成一个字符串列表是一项微不足道的任务。

list(c.items())

# [('F', 2),
#  ('o', 2),
#  (' ', 1),
#  ('i', 1),
#  ('g', 1),
#  ('h', 1),
#  ('t', 1),
#  ('e', 1),
#  ('r', 1),
#  ('s', 1)]