Skip to main content
 首页 » 编程设计

python之我如何计算而不是在 python 中重复相同的字母

2025年05月04日9mate10pro

此代码计算字母,但我不希望它重写同一个字母两次。我能做什么?

d=list('banttnay') 
for letter in d: 
    print letter, d.count(letter) 

输出:

b 1 
a 2 
n 2 
t 2 
t 2 
n 2 
a 2 
y 1 

我不希望它重写 'a 2' 或 't 2' 两次

请您参考如下方法:

使用set():

In [40]: d='banttnay' 
 
In [41]: for x in set(d): 
   ....:     print x,d.count(x) 
   ....:      
a 2 
y 1 
b 1 
t 2 
n 2 

或维护订单使用 OrderedDict来自 collections 模块:

In [67]: from collections import * 
 
In [68]: c=OrderedDict() 
 
In [69]: for x in d: 
    c[x]=c.get(x,0)+1 
In [71]: for x in c: 
   ....:     print x,c[x] 
   ....:      
b 1 
a 2 
n 2 
t 2 
y 1 

或者您也可以使用 itertools Recipes 中的 unique_everseen 配方:

>>> d='banttnay' 
>>> from itertools import * 
>>> def unique_everseen(iterable, key=None): 
...     seen = set() 
...     seen_add = seen.add 
...     if key is None: 
...         for element in ifilterfalse(seen.__contains__, iterable): 
...             seen_add(element) 
...             yield element 
...     else: 
...         for element in iterable: 
...             k = key(element) 
...             if k not in seen: 
...                 seen_add(k) 
...                 yield element 
...  
>>> for x in unique_everseen(d): 
...     print x,d.count(x) 
...  
b 1 
a 2 
n 2 
t 2 
y 1