相当于Python';s列表理解

相当于Python';s列表理解,python,go,Python,Go,我在玩围棋,但我很难用其他语言做一些非常简单的事情 我想复制一个类似的语法: array = [a for a in anotherArray if (some condition)] 围棋中的优雅方式是什么?我真的很想简化我的代码,尤其是在数组上使用函数时。例如: min = min(abs(a[i], b[j]) for i in range(n) for j in range(i, n)) 非常感谢有趣的是,刚刚(18小时前)提出了

我在玩围棋,但我很难用其他语言做一些非常简单的事情

我想复制一个类似的语法:

array = [a for a in anotherArray  if (some condition)]
围棋中的优雅方式是什么?我真的很想简化我的代码,尤其是在数组上使用函数时。例如:

min = min(abs(a[i], b[j]) for i in range(n)
                          for j in range(i, n))
非常感谢

有趣的是,刚刚(18小时前)提出了一个图书馆,它可以满足您的需求:

:

正如所指出的,各国:

filter
包含用于通过过滤器函数的分布式应用程序过滤切片的实用程序函数

这个软件包是一个实验,目的是看看用围棋写这样的东西有多容易。这很简单,但是
for
循环同样简单,效率也更高

您不应使用此软件包。

这一警告反映在文件“”第“”节中:

这些是常见的,如
map
reduce
fold
),
过滤器
zip

案例
类型安全数据转换:
map
fold
zip

使用仿制药的优点
表示数据转换的简明方法

使用泛型的缺点
最快的解决方案需要考虑应用这些转换的时间和顺序,以及每个步骤生成的数据量。
对于初学者来说,它更难阅读

替代解决方案

用于
循环和常用的语言结构


如果您看到的确实是python列表理解,那么go-AFAIK中就没有这样的语法等价物

方法是创建一个函数,该函数获取一个切片和一个函数(用于测试条件)并返回一个新切片

编辑:
看起来围棋中已经有这样一个功能了。cf VonC

我认为您要查找的术语是python列表
理解
第二个示例在python中不起作用:abs使用1个参数,而不是2个参数。我倾向于同意Pike的自述——使用
for
。可能永远,但肯定现在,Go是一种支持直线代码的命令式语言。不管有多少人希望,这种语言可能不会改变以使其他方法更简单。这个软件包的要点是(在收到投诉后),如果你觉得你真的需要它,你可以用它来反映你的想法,而不是他认为你应该这么做。@TwoTwo是的,我想,“
for
”,再加上一些“
go generate
”就足够了。注意突出的“你不应该使用这个软件包”在Not in Go(只是GitHub上的一个普通库),文档建议您不要使用它;这只是一个实验,证明如果你愿意,你可以做到。
// 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)