Python:reduce(字符串列表)->string

2024-05-12 15:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> 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'
>>>

我想是“a.b.c.d”或“abcd”。不知怎么的,无法解释结果。这里也有类似的问题,但不完全像这个问题。


Tags: lambdaimportreduceasadbkdeltaabcd
1条回答
网友
1楼 · 发布于 2024-05-12 15:49:28

执行作为第一个参数传递的函数的结果将是下一次迭代中该函数的第一个参数。所以,你的代码是这样工作的

lambda x, y: x[0] + "." + y[0]
  1. x时,y分别是'alfa''bravo'a.b

  2. 现在,x将是a.by将是'charlie',所以结果将是a.c

  3. 现在,x将是a.cy将是'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不是空字符串时,我们才使用.,否则我们使用空字符串,这样连接将得到您想要的结果。

相关问题 更多 >