Python总和,为什么不字符串呢?

穆罕默德·阿尔卡鲁里(Muhammad Alkarouri):

Python具有内置函数sum,实际上等效于:

def sum2(iterable, start=0):
    return start + reduce(operator.add, iterable)

适用于所有类型的参数(字符串除外)。它适用于数字和列表,例如:

 sum([1,2,3], 0) = sum2([1,2,3],0) = 6    #Note: 0 is the default value for start, but I include it for clarity
 sum({888:1}, 0) = sum2({888:1},0) = 888

为什么特地省去了弦乐?

 sum( ['foo','bar'], '') # TypeError: sum() can't sum strings [use ''.join(seq) instead]
 sum2(['foo','bar'], '') = 'foobar'

我似乎还记得其中原因的Python列表中的讨论,因此可以使用一个解释或一个指向该解释的线程的链接。

编辑:我知道标准方法是这样做"".join我的问题是为什么禁止对字符串使用sum的选项,而列表却没有禁止的选项。

编辑2:尽管我认为鉴于我得到的所有好的答案都不需要这样做,但问题是:为什么sum在可迭代的包含数字或可迭代的包含列表而不在可迭代的包含字符串上起作用?

Rbp:

Python试图阻止您“添加”字符串。您应该加入他们的行列:

"".join(list_of_strings)

它快得多,并且使用的内存更少。

快速基准:

$ python -m timeit -s 'import operator; strings = ["a"]*10000' 'r = reduce(operator.add, strings)'
100 loops, best of 3: 8.46 msec per loop
$ python -m timeit -s 'import operator; strings = ["a"]*10000' 'r = "".join(strings)'
1000 loops, best of 3: 296 usec per loop

编辑(回答OP的编辑):关于为什么字符串显然是“单一”的,我相信这只是针对常见情况进行优化以及实施最佳实践的问题:您可以使用''更快地连接字符串。加入,因此明确禁止使用字符串sum会向新手指出。

顺便说一句,此限制已“永远存在”,即,由于将限制sum添加为内置函数(修订版32347

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在不包含原始字符串的情况下表达包含'\'的正则表达式呢?

.ToString()从StringBuilder创建一个新字符串,那么为什么不直接使用字符串呢?

Python字符串不是一成不变的吗?那么为什么a +“” + b有效呢?

Python字符串不是一成不变的吗?那么为什么a +“” + b有效呢?

为什么可以使用字符串文字初始化未签名的char数组,而不初始化未签名的char指针呢?

为什么python引用“不”是其字符串计数器部分?

当字符串的引号不匹配时,为什么Python没有给出任何错误?

当字符串的引号不匹配时,为什么Python不给出任何错误?

为什么Python的语法规范不包含文档字符串和注释?

为什么我的函数不返回字符串?

为什么在JavaScript中不空字符串== null

这些字符串为什么不匹配?

为什么字符串不充当引用类型?

为什么JObject不转换JSON字符串?

sed字符串不匹配。为什么?

为什么ismap属性不尊重查询字符串?

为什么此字符串与模式不匹配

为什么字符串不返回其内存位置?

为什么函数不返回字符串?

为什么子字符串不处理负索引?

为什么字符串变量更改后不更新

为什么服务不返回编码字符串?

为什么 for 循环不处理整个输入字符串?

为什么此代码不返回字符串?

为什么字符串指针不指向首地址?

Stream.of(INT [])返回流<INT []>而Stream.of(字符串[])返回流<字符串>为什么呢?

是否适用于在不使用数组的情况下将指向字符的指针(在为其分配字符串之后)传递给方法和修改此字符串,为什么不呢?

为什么连接简单的字符串而不是直接写呢?

字符串是Java中的对象,那么为什么不使用'new'创建它们呢?