Python减少len()函数

时间:2017-11-01 21:29:20

标签: python list lambda

我有

insert_values = "('%s', '%s')" % params['Report_Name'], params['Report_link']
@ipinsert=Ipdw.connection.execute("insert into [DB_Test02].[dbo].[My_Table] (Report_Name,Report_Link) values #{insert_values}")

>>> reduce( (lambda x,y: x + y), [1,2,3])

6

然后,我想得到列表中所有字符串元素的总和:

>>> reduce( (lambda x,y: x + y), ['cat','dog','hat'])

'catdoghat'

它会产生错误。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

考虑一下你的减少操作:

(len((len('cat') + len('dog')))+ len('hat'))

您最终会在len上致电int。你可能想要:

sum(map(len, ['cat','dog','hat']))

停止重新发明轮子并使用reduce sum

另请注意,使用sum(相当于reduce(lambda x,y: x+y, ...)将对字符串具有可怕的性能,即O(n ^ 2)。而是使用{ {1}}

事实上,如果你尝试的话,翻译会对你大喊大叫!

''.join(sequence_of_strings)

答案 1 :(得分:3)

reduce是一个迭代地遍历所有项目并应用操作的过程,让我们尝试用你的例子来做:

reduce( (lambda x,y: len(x) + len(y)), ['cat','dog','hat'])

所以首先x是' cat'并且y是' dog'输出为6,现在我们将x设为6,y为' hat'我们将在len(6)

失败

你要做的是将字符串的长度相加,你可以使用map,因为与reduce不同,map在所有项目上都应用了一个函数(这正是你想要的 - 将len应用于每个项目)并且总和将负责添加:

sum(map(len, ['cat','dog','hat']))