python是否等同于C#的Enumerable.Aggregate?

Mat*_*hew 1 c# python aggregate aggregate-functions

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

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

我可以做点什么

result = collection[0]
for string in collection[1:]:
    result = "{0}, {1}".format(result, string)
Run Code Online (Sandbox Code Playgroud)

但这感觉就像一块垃圾.python是否有一种优雅的方式来完成同样的事情?

agf*_*agf 7

用途str.join:

result = ', '.join(iterable)
Run Code Online (Sandbox Code Playgroud)

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

result = ', '.join(str(item) for item in iterable)
Run Code Online (Sandbox Code Playgroud)

  • +1,这就是你应该*在C#中做的事情. (2认同)

lee*_*man 5

C# Enumerable.Aggregate 方法的等效项是 python 内置的“reduce”方法。例如,

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 
Run Code Online (Sandbox Code Playgroud)

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

这意味着你可以达到同样的效果

result = reduce(lambda s1, s2: "{0}, {1}".format(s1, s2), collection)
Run Code Online (Sandbox Code Playgroud)

或者与

result = reduce(lambda s1, s2: s1 + ", " + s2, collection)
Run Code Online (Sandbox Code Playgroud)

', '.join在你的情况下,由于 python 不可变字符串,最好按照其他人的建议使用。

为了完整起见,Python 中的 C# Enumerable.Select 方法是“map”。

现在,如果有人问你,你可以说你了解 MapReduce :)