我有
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'
它会产生错误。
我做错了什么?
答案 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']))