python有类似c# '的Enumerable.Aggregate吗?

本文关键字:Enumerable Aggregate python | 更新日期: 2023-09-27 18:10:01

在c#中,如果我有一个字符串集合,并且我想获得一个逗号分隔的字符串表示集合(没有多余的注释在开始或结束),我可以这样做:

string result = collection.Aggregate((s1, s2) => String.Format("{0}, {1}", s1, s2));

我可以这样写

result = collection[0]
for string in collection[1:]:
    result = "{0}, {1}".format(result, string)

但这感觉像一个悬崖。python是否有一种优雅的方式来完成同样的事情?

python有类似c# '的Enumerable.Aggregate吗?

使用str.join:

result = ', '.join(iterable)

如果不是集合中的所有项都是字符串,则可以使用map或生成器表达式:

result = ', '.join(str(item) for item in iterable)

与c# Enumerable等价。聚合方法是python内置的"reduce"方法。例如,

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

计算((((1 + 2)+(3)+ 4)+ 5)。也就是15

这意味着您可以使用

result = reduce(lambda s1, s2: "{0}, {1}".format(s1, s2), collection)

result = reduce(lambda s1, s2: s1 + ", " + s2, collection)

在你的情况下,最好使用', '.join,因为其他人已经建议,因为python的不可变字符串。

为了完整,c# Enumerable。python中的选择方法是"map"

现在如果有人问你,你可以说你知道MapReduce:)

你可以这样做:

> l = [ 1, 3, 5, 7]
> s = ", ".join( [ str(i) for i in l ] )
> print s
1, 3, 5, 7

我建议查找"python列表推导式"([…]为…]查阅更多资料