我想使用map,reduce,filter以一种更为python的方式编写这段代码。有人能帮我吗。你知道吗
这是一段简单的代码,它根据字符串在字符串中的位置为字符串赋值。
例如,对于字符串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)
如果您想以当前的方式计算结果,我认为您当前的代码与python代码差不多(唯一的例外是不必要的
enumerate
调用)。你知道吗然而,我认为有一个更好的方法来找到你的
total
,而不是在你做计数的时候把它们加起来。每一个值所贡献的总数的一部分可以直接从该值的最终计数中计算出来(它是一个三角形数字)。这意味着您可以一次性计算值,并在最后计算出总数。你知道吗我是这样做的:
如果你愿意的话,这里有另一个答案,那就是你想做什么就做什么。Python3兼容,尚未在Python2上测试。你知道吗
输出
分解:
partial(str.count, sys.argv[1]) ---- (1)
定义一个高阶函数,map
将应用于sys.argv
。这样,就创建了计数。最后的答案不需要dict,所以它不会被创建。你知道吗map(---(1)---, set(sys.argv[1])) ---- (2)
应用部分函数(1)map(lambda x: x * (x + 1) // 2, ----(2)----) ----(3)
获取由(2)生成的计数,然后应用AP来获得总和。你知道吗reduce(lambda x, y: x + y, ----(3)----)
用(3)中的和的总和来结束它。你知道吗三行。。。一个导入和两行香草Python。你知道吗
第一行创建字符到计数的映射。然后,第二行查找列表中每个字符的序列和,用第二行
sum
求每个字符的总和。你知道吗输出:
警告:这不是有效的,因为它计算每个字符的计数(线性复杂度)。你知道吗
相关问题 更多 >
编程相关推荐