Skip to main content
 首页 » 编程设计

python之使用 Python 3 迭代字符串

2025年05月04日25birdshome

我想使用 map、reduce、filter 以更 pythonic 的方式编写这段代码。有人可以帮助我吗。

这是一段简单的代码,它根据字符串在字符串中的位置将总值分配给字符串。 例如,对于字符串 abaacab

a b a a c a b 
1   2 3   4    occurrence of a 
  1         2  occurrence of b 
        1      occurrence of c 
1+1+2+3+1+4+2 = 14 

import sys 
check, total = {}, 0 
for i, v in enumerate(sys.argv[1]): 
    if v in check: 
        check[v] += 1 
    else: 
        check[v] = 1 
    total += check[v] 
print(total) 

请您参考如下方法:

如果您想按照当前的方式计算结果,我认为您当前的代码尽可能地符合 Pythonic(唯一的异常(exception)是不必要的 enumerate 调用) .

但是,我认为有一种更好的方法来找到您的总数,而不是在您制作它们时将计数相加。每个值占总数的部分可以直接从该值的最终计数(它是一个三角数)中计算出来。这意味着您可以一次性计算这些值并在最后计算出总数。

这是我的做法:

import sys 
import collections 
 
counts = collections.Counter(sys.argv[1]) 
total = sum(n * (n+1) // 2 for n in counts.values()) 
print(total)