我正在玩Go,但是我很难做其他语言中非常简单的事情。
我想重现类似的语法:
array = [a for a in anotherArray if (some condition)]
在Go中,有什么优雅的方法?我真的很想简化我的代码,尤其是在数组上使用函数时。例如:
min = min(abs(a[i], b[j]) for i in range(n)
for j in range(i, n))
非常感谢
有趣的是,Rob
Pike
刚刚提出了(18小时前)库过滤器,该过滤器可以满足您的要求:
例如查看Choose()
// Choose takes a slice of type []T and a function of type func(T) bool. (If
// the input conditions are not satisfied, Choose panics.) It returns a newly
// allocated slice containing only those elements of the input slice that
// satisfy the function.
在这里测试:
func TestChoose(t *testing.T) {
a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
expect := []int{2, 4, 6, 8}
result := Choose(a, isEven)
正如评论中[twotwotwo
]指出的那样,该库的GoDoc指出:
软件包
filter
包含实用程序功能,用于通过过滤器功能的分布式应用程序来过滤切片。该软件包是一个实验,旨在了解在Go中编写此类代码有多么容易。这很容易,但是
for
循环同样容易且效率更高。您不应该使用此软件包。
该警告反映在文档“
Go泛型讨论摘要 ”的“
功能代码 ”部分中:
这些是通常的高阶函数如
map
,reduce
(fold
),filter
,zip
等等案例 :
类型安全的数据转换:map
,fold
,zip
使用泛型的优点 :
表达数据转换的简洁方法。使用泛型的缺点 :
最快的解决方案需要考虑何时以及按什么顺序应用这些转换,以及每个步骤生成多少数据。
对于初学者来说很难阅读。替代解决方案 :
使用
for
循环和常用语言构造。
问题内容: 在Java中,可以使用 构建器模式 来提供一种更具可读性的方法来实例化具有许多参数的类。在构建器模式中,一个人使用一种方法来构造配置对象以设置命名属性,然后使用它来构造另一个对象。 Python中的等效项是什么?模仿相同实现的最佳方法是吗? 问题答案: 设计模式通常可以用内置语言功能代替。 您的用例 您说:“我想有一个更具可读性的“方法”来实例化具有许多参数的类。” 在Java的情况下
问题内容: 最近,我遇到了一些Java代码,这些代码简单地将一些字符串放入Java TreeSet中,为其实现了基于距离的比较器,然后在日落时分快乐地计算出给定的分数来解决给定的问题。 我的问题 是否有适用于Python的等效数据结构? Java树集看起来基本上是一个有序字典,可以使用某种比较器来实现这种排序。 我看到有一个用于 OrderedDict的Py3K的PEP,但是我使用的是2.6.x。
问题内容: 当我从解释器编写Python代码时,我可以键入要在当前作用域中定义的名称列表。当我使用交互式控制台(如Firebug,Chrome控制台等)从浏览器开发Javascript代码时,如何以编程方式实现具有相同的信息? 问题答案: 在ChatZilla的代码中,有几个功能可以执行此操作,您必须正确检查许可证以查看是否可以将其撕下来并在任何地方使用。 相关功能可以在 http://hg.mo
问题内容: 我正在从xml配置转移到注释。我想转换一个会话范围的bean是 可以通过注释完成此操作吗?如果没有,我该怎么做才能使该声明继续工作? 问题答案: 在spring上下文xml中,执行以下操作: 请注意,尽管如此,你将需要为该包中的所有类编写接口。
问题内容: 伙计们 我正在尝试找到问题的最优雅解决方案,并且想知道python是否为我想做的事情内置了任何东西。 我正在做的是这个。我有一个列表,并且我有一个接受项目并返回列表的函数。我可以使用列表推导来转换所有内容,例如: 但这返回一个列表列表; 我真正想要的是获取扁平化的列表; 现在,其他语言也有它。传统上用函数式编程语言来称呼它,而.Net称它为。python有类似的东西吗?有没有一种巧妙的
问题内容: 我有这个嵌套列表: 现在,我要做的是将列表中的每个元素转换为float。我的解决方案是这样的: 但这可以使用嵌套列表理解来完成吗? 我所做的是: 但是结果是一堆100的总数为2400。 任何解决方案,解释将不胜感激。谢谢! 问题答案: 这是使用嵌套列表理解的方法: 这将为你提供一个列表列表,与你开始时的列表类似,只是使用浮点数而不是字符串。如果你想要一个固定列表,则可以使用。