>>> import functools as ft
>>> bk = ft.reduce(lambda x, y: x[0] + "." + y[0], ['alfa', 'bravo', 'charlie', 'delta'])
>>> bk
'a.d'
>>> km = ft.reduce(lambda x, y: x + y, [1, 2, 3, 4])
>>> km
10
>>> bk = ft.reduce(lambda x, y: x[0] + y[0], ['alfa', 'bravo', 'charlie', 'delta'])
>>> bk
'ad'
>>>
我期望像“ abcd”或“ abcd”之类的东西。不知何故,无法解释结果。这里也有类似的问题,但并非完全相同。
执行作为第一个参数传递的函数的结果,将是下一次迭代中该函数的第一个参数。因此,您的代码是这样的
lambda x, y: x[0] + "." + y[0]
当x
,分别y
是'alfa'
和'bravo'
时a.b
。
现在,x
将是a.b
并且y
将是'charlie'
,所以结果将是a.c
现在,x
将是a.c
并且y
将是'delta'
,所以结果将是a.d
这就是为什么结果是 a.d
要获得所需的内容,请将所有字符串中的所有前几个字符组成一个列表,并将所有元素与一起连接.
,就像这样
print(".".join([item[0] for item in data]))
# a.b.c.d
注意:我不喜欢这种方式,但是为了完整起见,您可以使用这样做reduce
,
data = ['alfa', 'bravo', 'charlie', 'delta']
print(ft.reduce(lambda x, y: x + ("." if x else "") + y[0], data, ""))
# a.b.c.d
现在,最后一个空字符串将是第x
一次迭代中的第一个值。而且,.
仅当x
不是空字符串时才使用,否则我们将使用空字符串,以便串联可提供所需的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句