Python 计算字符串中所有字符的出现次数,但如果字符重复,则只计算一次

Python 计算字符串中所有字符的出现次数,但如果字符重复,则只计算一次,python,string,generator,Python,String,Generator,注意:请确保这不是重复的,我正在尝试找到一种线性方式。 我试图将填充ascii字母的字符串转换为填充ascii字母的字符串 例如: string1='abc' 要将其转换为包含ascii字母的字符串,我只需使用一行命令: string2=[string1.string1中l的计数(l)] 这将输出: [1,1,1] 但是如果在string1中有多个重复的字符,它看起来会不同 例如:string1='aaabbccc' 并对其进行改造: string2=[string1.string1中l的计数

注意:请确保这不是重复的,我正在尝试找到一种线性方式。

我试图将填充ascii字母的字符串转换为填充ascii字母的字符串

例如:
string1='abc'

要将其转换为包含ascii字母的字符串,我只需使用一行命令:

string2=[string1.string1中l的计数(l)]

这将输出:

[1,1,1]


但是如果在string1中有多个重复的字符,它看起来会不同

例如:
string1='aaabbccc'

并对其进行改造:

string2=[string1.string1中l的计数(l)]

而产出将是:

[3,3,3,3,3,3,3,3,3]


如你们所见,字符重复出现,我不知道如何制作一个只打印一次单个字母的生成器

例如:

而不是:

[3,3,3,3,3,3,3,3,3]

有没有办法用单线发电机输出

[3,3,3]
使用
设置

>>> [string1.count(l) for l in set(string1)]
[3, 3, 3]
Set将字符串转换为一组不同的字符:例如
aabc
abbc
,但
acb
也将转换为
{'a','b','c'}

这是您查找的输出,但您不知道哪个3指向哪个字符,因此最后最好使用建议的
计数器
方法使用
设置

>>> [string1.count(l) for l in set(string1)]
[3, 3, 3]
Set将字符串转换为一组不同的字符:例如
aabc
abbc
,但
acb
也将转换为
{'a','b','c'}


这是您查找的输出,但您不知道哪个3指向哪个字符,因此最终您最好使用建议的
计数器方法

您可以使用
OrderedCounter
在一行中完成

>>> from collections import Counter, OrderedDict
>>> class OrderedCounter(Counter, OrderedDict): 
...     pass
...
>>> OrderedCounter('aaabbbccc').values()
[3, 3, 3]

您可以使用
OrderedCounter
在一行中完成此操作

>>> from collections import Counter, OrderedDict
>>> class OrderedCounter(Counter, OrderedDict): 
...     pass
...
>>> OrderedCounter('aaabbbccc').values()
[3, 3, 3]

使用集合。计数器

>>> from collections import Counter
>>> Counter('aaabbbccc')
Counter({'a': 3, 'b': 3, 'c': 3})
通过使用
string.ascii\u小写
迭代计数器,可以轻松地将计数作为排序列表获取:

>>> import string
>>> c = Counter('aaabbbccc')
>>> [c[l] for l in string.ascii_lowercase]
[3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

使用集合。计数器

>>> from collections import Counter
>>> Counter('aaabbbccc')
Counter({'a': 3, 'b': 3, 'c': 3})
通过使用
string.ascii\u小写
迭代计数器,可以轻松地将计数作为排序列表获取:

>>> import string
>>> c = Counter('aaabbbccc')
>>> [c[l] for l in string.ascii_lowercase]
[3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

如果重复字符彼此不相邻,
aabaab
的预期输出是什么?请使用
collections.Counter
dict
。在你的问题中,我没有看到任何生成器。
Counter('aaabbbccc')
->
Counter({'b':3,'a':3,'c':3})
如果重复字符彼此不相邻,那么
aabaab
的预期输出是什么?使用
集合。Counter
dict
。在你的问题中,我没有看到任何生成器。
Counter('aaabbbccc')
->
Counter({'b':3,'a':3,'c':3})
谢谢,但我正在尝试将它更容易地转换为字符串类型,有没有简单的方法?@ShellRox你正在尝试将什么转换为字符串类型?我不明白。在这种情况下,您希望结果为
'333'
吗?@MoinuddinQuadri我正在尝试不使用数组形式输出数字,很抱歉我没有在问题中提到。@ShellRox check@Uriel Eli您是真正的读心术者谢谢,但我正在尝试更轻松地将其转换为字符串类型,有简单的方法吗?@ShellRox你想把什么变成字符串类型?我不明白。在这种情况下,您希望结果为
'333'
吗?@MoinuddinQuadri我正在尝试不使用数组形式输出数字,很抱歉我没有在问题中提到。@ShellRox check@Uriel Eli您是真正的读心人Hello,您知道如何将此输出轻松地转换为字符串吗?没有括号,谢谢!您好,您知道如何将此输出轻松地转换为字符串吗?没有括号,谢谢!