如何使用每个元素将操作应用于集合的所有成员
How to apply an operation to all members of a collection using each element
我想为集合中的每个元素对集合中的每个元素应用一个操作。我正在寻找类似于以下操作的东西:
result = []
for i in X:
for j != i in X:
if j % i == 0 (or whatever condition here)
result += j
我可以弄清楚对集合中的每个元素应用操作的部分,但是如何让它使用集合中的每个元素对迭代对象进行操作?
因此,例如,如果我有 2 3 5 8
,我将如何获得 4; ; ;
之类的东西?
我猜你是在尝试解决 adventofcode 第 3 天第 2 部分的问题吗?如果不是,那么我可能没有正确解释您的问题。
关键是一次考虑整个数组,而不是一次考虑一个项目,所以让我们忽略 for i in X:
]jnei=: ~:/~ 2 3 5 8 NB. for j != i in X:
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
]dividesExactly=: 0 = |~/~ 2 3 5 8 NB. if j % i == 0
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1
mask=: jnei *. dividesExactly NB. both conditions
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
%/~ 2 3 5 8 NB. divisions to choose from
1 0.666667 0.4 0.25
1.5 1 0.6 0.375
2.5 1.66667 1 0.625
4 2.66667 1.6 1
mask * %/~ 2 3 5 8 NB. evenly divided, off-diagonals
0 0 0 0
0 0 0 0
0 0 0 0
4 0 0 0
+/ , mask * %/~ 2 3 5 9 NB. ravel and sum to return 4
4
我可能会这样编码:
+/ , (%/~ * ~:/~ *. 0 = |~/~) 2 3 5 8
4
我想为集合中的每个元素对集合中的每个元素应用一个操作。我正在寻找类似于以下操作的东西:
result = []
for i in X:
for j != i in X:
if j % i == 0 (or whatever condition here)
result += j
我可以弄清楚对集合中的每个元素应用操作的部分,但是如何让它使用集合中的每个元素对迭代对象进行操作?
因此,例如,如果我有 2 3 5 8
,我将如何获得 4; ; ;
之类的东西?
我猜你是在尝试解决 adventofcode 第 3 天第 2 部分的问题吗?如果不是,那么我可能没有正确解释您的问题。
关键是一次考虑整个数组,而不是一次考虑一个项目,所以让我们忽略 for i in X:
]jnei=: ~:/~ 2 3 5 8 NB. for j != i in X:
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
]dividesExactly=: 0 = |~/~ 2 3 5 8 NB. if j % i == 0
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1
mask=: jnei *. dividesExactly NB. both conditions
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
%/~ 2 3 5 8 NB. divisions to choose from
1 0.666667 0.4 0.25
1.5 1 0.6 0.375
2.5 1.66667 1 0.625
4 2.66667 1.6 1
mask * %/~ 2 3 5 8 NB. evenly divided, off-diagonals
0 0 0 0
0 0 0 0
0 0 0 0
4 0 0 0
+/ , mask * %/~ 2 3 5 9 NB. ravel and sum to return 4
4
我可能会这样编码:
+/ , (%/~ * ~:/~ *. 0 = |~/~) 2 3 5 8
4