gpt4 book ai didi

list - 丢弃索引中的元素,元素元组

转载 作者:行者123 更新时间:2023-12-02 07:21:38 25 4
gpt4 key购买 nike

Haskell 的新手,并尝试构造一个 [[(Int, Int)]],其中每个元素都是其对应的网格位置,从另一个板[[a]]<构造。因此边长为 3 的正方形 [[a]] 将创建

[[(0, 0), (1, 0), (2, 0)]
,[(0, 1), (1, 1), (2, 1)]
,[(0, 2), (1, 2), (2, 2)]]

(最终我将使用 map (map ...) 将其迭代到类型为 [[a]] -> (Int, Int) -> 的函数中b 创建一个 [[b]],所以如果我遗漏了一些更简单的东西,请告诉我!)

在 Python 中我可能会这样做:

[[(x,y) for (x,_) in enumerate(board[y])] for (y,_) in enumerate(board)]

也就是说,我会使用 enumerate 内置函数来构造 (index, element) 元组并丢弃该元素。

我知道在 Haskell 中我可以做到:

[[(x,y) | x <- [0..length (board!!y)-1]] | y <- [0..length board-1]]

但是 Python 中的那些构造(for foo in range(len(bar)))有点反模式,非常不鼓励。在 Haskell 中也是如此吗?

如果我要像编写 Python 一样编写 Haskell,我会这样做:

[[(x,y) | (x,_) <- zip [0..] (board!!y)] | (y,_) <- zip [0..] board]

这是不受欢迎的吗?

最佳答案

您最后的“像 Python 一样编写”的建议几乎不错,但是您不必要地丢弃了棋盘的行,然后使用 (!!) 重新创建它们。像这样写就完全没问题了:

board :: [[Char]]
board = ["abc", "def", "ghi"]

board' :: [[(Int, Int)]]
board' = [[(x, y) | (x, _) <- zip [0..] row]
| (y, row) <- zip [0..] board]

关于list - 丢弃索引中的元素,元素元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44317409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com