python是否具有与C#&x27的等价物;s可枚举。聚合?

python是否具有与C#&x27的等价物;s可枚举。聚合?,c#,python,aggregate-functions,aggregate,C#,Python,Aggregate Functions,Aggregate,在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(r

在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是否有一种优雅的方式来完成同样的事情?

使用:

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

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

你可以这样做:

> l = [ 1, 3, 5, 7]
> s = ", ".join( [ str(i) for i in l ] )
> print s
1, 3, 5, 7
我建议查看“python列表理解”(上面的[…for…])以了解更多信息。

与C#Enumerable等效。聚合方法是python内置的“reduce”方法。 例如

计算(((1+2)+3)+4)+5)。哪一个是15

这意味着您可以通过

或与

在您的情况下,最好使用“
”,”。由于python是不可变字符串,所以请按照其他人的建议加入

为了完整性,python中的C#Enumerable.Select方法是“map”


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

你的C#代码的性能也很糟糕(与你的表现相比),所以我不会太担心它,因为它对你来说已经足够好了…@Blindy,是的,我在发布之后就意识到,并删除了我问题的这一部分:)包含输入和输出的示例可能会有所帮助,但听起来您可以使用reduce()作为collection.Aggregate()的替代品,但还有其他替代品。很多潜在的重复项,其中一项是1。他确实说过这是一个字符串集合,所以
str
部分实际上是不必要的。2.即使您确实使用了
str
,列表理解也不是正确的工具,请使用生成器表达式。3.请不要发布仅复制另一个答案中显示的解决方案的答案。
> l = [ 1, 3, 5, 7]
> s = ", ".join( [ str(i) for i in l ] )
> print s
1, 3, 5, 7
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 
result = reduce(lambda s1, s2: "{0}, {1}".format(s1, s2), collection)
result = reduce(lambda s1, s2: s1 + ", " + s2, collection)