[I]您可以通过Go语言实现更简单的方法吗?
基本上没有。
您可以使用range稍微简化for循环,仅此而已。
经验法则:Go中没有魔术。
,
我认为在Go中做到这一点的自然方法是仅视情况而定。当您尝试做一些非常基本的事情时(例如用升序数填充数组),使Python的列表推导看起来很吸引人的情况。如果它是一个简单的概念,我们应该能够简单地编写它。您在这里可能会不同意,但我想说的是分配一个升序的数字(甚至是数字)实际上不是一个典型的问题,似乎没有太大的用途。
具有列表理解能力的陷阱是,将它们用于更复杂的场景变得很诱人。以Geeks for geeks
为例
# 2-D List of planets
planets = [['Mercury','Venus','Earth'],['Mars','Jupiter','Saturn'],['Uranus','Neptune','Pluto']]
flatten_planets = []
for sublist in planets:
for planet in sublist:
if len(planet) < 6:
flatten_planets.append(planet)
print(flatten_planets)
输出:
['Venus','Earth','Mars','Pluto']
这也可以使用嵌套列表理解来完成
如下所示:
# 2-D List of planets
planets = [['Mercury','Pluto']]
# Nested List comprehension with an if condition
flatten_planets = [planet for sublist in planets for planet in sublist if len(planet) < 6]
print(flatten_planets)
输出:
['Venus','Pluto']
尽管将4行代码减少到1条可能会令人满意,但是使用“理解”可以使代码对人类的理解较少。
此表达式...
[planet for sublist in planets for planet in sublist if len(planet) < 6]
似乎令人反感,正在发生相同数量的“嵌套”(事物列表理解使之消失),只是现在没有像缩进这样的视觉线索可以帮助我们理解它。我们必须仔细阅读此行,并重新构造脑海中的嵌套逻辑,以了解其工作原理。
我从中获得的这篇文章解释了这样的理解:
列表理解是Python最令人惊奇的功能之一。它
是创建列表的一种聪明简洁的方法...
这是一种非常蟒蛇的态度,当某项功能使您在代码中使用它时感到很聪明时,这意味着该功能很不错,即使它使其他人(或您以后)也很难尝试阅读和理解您的代码。 Go强烈拒绝这种态度。
Go的一位创作者Rob Pike对此话题提供了一个令人难忘的报价(我在这里释义)
人们要求我们提供此类功能,我们说“不”。原因之一是,如果添加这些功能,人们将使用它们,这就是它们在那里的原因。但是它们可能比简单的for循环更昂贵。他们往往会针对解决方案简单得多的问题生成更昂贵的解决方案
本文链接:https://www.f2er.com/3125170.html