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