我想使用 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)
