python - 在 python 中使用 reduce() 序列化一个字符串

标签 python lambda reduce

我正在尝试学习在 python 中做事的函数式编程方式。我正在尝试使用以下代码序列化 python 中的字符串列表

S = ["geeks", "are", "awesome"]
reduce(lambda x, y: (str(len(x)) + '~' + x) + (str(len(y)) +  '~' + y), S)

我期待:

5~geeks3~are7~awesome

但我看到:

12~5~geeks3~are7~awesome

有人能指出原因吗?提前致谢!

最佳答案

reduce每个当前迭代的函数依赖于先前的项目/计算(所有 reduce 例程的性质),这就是为什么你得到 12在结果字符串的开头:在第一次通过时,该项目是 5~geeks3~are长度12并且在下一次迭代中使用/添加。

相反,您可以采用简单的连续方法:

lst = ["geeks", "are", "awesome"]
res = ''.join('{}~{}'.format(str(len(s)), s) for s in lst)
print(res)    # 5~geeks3~are7~awesome

关于python - 在 python 中使用 reduce() 序列化一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58475837/

相关文章:

python - 网络抓取以形成新闻数据库

python - 检查用户名是否已存在于数据库中(Python + Pymongo)

Java8 在非最终变量上有效地最终编译时错误

android - 在 Kotlin 中将接口(interface)作为参数传递

javascript - 在 JavaScript 中将几个数组组合成一个对象数组

python - Python 中的 lambda 函数和函数列表

python - 我收到错误 <string> :149: RuntimeWarning: invalid value encountered in sqrt while generating a list

javascript - 对毫秒数组求和

java - 如何在lambda表达式(JAVA)中使用try catch?

c++ - 在 cuda Thrust 中融合两个归约运算