Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 列表折纸~从两个列表生成新列表_Elixir - Fatal编程技术网

Elixir 列表折纸~从两个列表生成新列表

Elixir 列表折纸~从两个列表生成新列表,elixir,Elixir,我目前正在学习长生不老药,我仍在努力让我的头脑围绕清单理解。我有两个列表,内容和一个素数的一次性列表。我使用两个列表理解,然后使用一个if来确定它是否是素数,将其丢弃并从列表中删除 iex(25)> content = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] iex(26)> for c <- content do ...(26)> fo

我目前正在学习长生不老药,我仍在努力让我的头脑围绕清单理解。我有两个列表,内容和一个素数的一次性列表。我使用两个列表理解,然后使用一个
if
来确定它是否是素数,将其丢弃并从列表中删除

iex(25)> content = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
iex(26)> for c <- content do                      
...(26)>   for s <- [1, 3, 5, 7] do
...(26)> 
...(26)>     if s == c do
...(26)>       List.delete(content, s)
...(26)>     end
...(26)> 
...(26)>   end
...(26)> end
[[[2, 3, 4, 5, 6, 7, 8, 9, 10], nil, nil, nil], [nil, nil, nil, nil],
 [nil, [1, 2, 4, 5, 6, 7, 8, 9, 10], nil, nil], [nil, nil, nil, nil],
 [nil, nil, [1, 2, 3, 4, 6, 7, 8, 9, 10], nil], [nil, nil, nil, nil],
 [nil, nil, nil, [1, 2, 3, 4, 5, 6, 8, 9, 10]], [nil, nil, nil, nil],
 [nil, nil, nil, nil], [nil, nil, nil, nil]]

此外,我还尝试将其与
Enum.map
一起使用,但造成了更大的混乱。有人能告诉我如何获得我想要的1xN列表吗?

有一个简单的方法:

l = [1,2,3,4,5,6,7,8,9,10]
o = [1,3,5,7,9]

d = l -- o
我不确定是否可以使用列表理解来实现你想要实现的目标



编辑:我应该把问题看得更仔细一点。我认为提问者只是想通过列表理解来寻求一种方法。重读这个问题,我发现我只是看错了。我已经编辑了我的答案

有一个简单的方法可以做到这一点:

l = [1,2,3,4,5,6,7,8,9,10]
o = [1,3,5,7,9]

d = l -- o
我不确定是否可以使用列表理解来实现你想要实现的目标



编辑:我应该把问题看得更仔细一点。我认为提问者只是想通过列表理解来寻求一种方法。重读这个问题,我发现我只是看错了。我已经编辑了我的答案

带有
for
的列表理解始终返回一个列表。因此,如果将一个
for
嵌套在另一个
for
中,则内部的
for
将返回一个列表,因此外部for的每个元素都将是一个列表,因此是一个列表列表。这里没什么奇怪的事

另一件正在发生的事情,您可能没有预料到的是结果中的
nil
s的数量:内部
for
的最后一个表达式是
if
,没有
else
分支。这意味着,如果条件为true,则返回
if
的主体,如果条件为false,则返回
nil

Onorio的回答(使用
-/2
)在我看来很好。您可以做的另一件事(不需要列表理解)是使用
Enum.reject/2
过滤掉非素数:

Enum.reject(content, fn n -> n in [1, 3, 5, 7] end)
如果您确实想使用
进行
,您可以使用防护:

for n in contents, not n in [1, 3, 5, 7], do: n

为了完整起见,最后一件事是:当您执行
List.delete(contents,…)
时,您并不是在修改原始的
内容
列表。

使用
for
的列表理解始终返回一个列表。因此,如果将一个
for
嵌套在另一个
for
中,则内部的
for
将返回一个列表,因此外部for的每个元素都将是一个列表,因此是一个列表列表。这里没什么奇怪的事

另一件正在发生的事情,您可能没有预料到的是结果中的
nil
s的数量:内部
for
的最后一个表达式是
if
,没有
else
分支。这意味着,如果条件为true,则返回
if
的主体,如果条件为false,则返回
nil

Onorio的回答(使用
-/2
)在我看来很好。您可以做的另一件事(不需要列表理解)是使用
Enum.reject/2
过滤掉非素数:

Enum.reject(content, fn n -> n in [1, 3, 5, 7] end)
如果您确实想使用
进行
,您可以使用防护:

for n in contents, not n in [1, 3, 5, 7], do: n

为了完整起见,最后一件事是:当您执行
List.delete(contents,…)
时,您并不是在修改原始的
contents
列表。

感谢您解释@plotplot为什么会得到这样一个奇怪的列表。我对此也有点困惑。谢谢你解释为什么@plotplot会得到这样一个奇怪的列表。我也有点困惑,这太完美了。谢谢你的洞察力!也要感谢@whatyouhideThis,这是完美的。谢谢你的洞察力!同样感谢@whatyouhideBTW,它没有更好的效果,但是你可以将你的两个列表理解合并成一个结构:顺便说一句,对于c,它没有更好的效果,但是你可以将你的两个列表理解合并成一个结构:对于c