gpt4 book ai didi

python - 如何创建遍历列表所有对角线可能性的 for 循环?

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:41 25 4
gpt4 key购买 nike

上下文

你如何在这个列表中沿对角线查找单词?注意:为了表示找到一个词,可以用'-'等任意字符代替

grid =   ["HXXWXXXXXD",
"XOXXOXXXOX",
"XXRXXCXGXX",
"XXXSXXXXXT",
"XXXXEXXXEX"]

我认为网格中对角线的所有可能性是:

  • 向下并向左走
  • 向下和向右走
  • 往左上走
  • 向右上方走

在这种情况下,要查找的词是:

words = ["HORSE","COW","DOG","ET"] # don't ask

我如何在垂直和水平方向上找到单词

沿对角线查找单词似乎比水平或垂直查找单词困难得多。当水平查找单词时,我可以循环遍历 grid 中的每个 rowwords 中的每个 word。然后,我可以将 row 中的 word 替换为符号 * len(word) 以说明已找到它。在垂直方向上,我将网格顺时针旋转 90°,然后进行相同的水平循环遍历列表的过程。然后我将列表旋转回其原始状态。

对角线查找单词有哪些不同的解决方案?

最佳答案

您可以通过将列表中的每个字符串比最后一个多移动 1 来转换列表 - 并用填充符填充创建的空间(在这种情况下使用 '0'):

mearray = np.array([[e for e in g] for g in grid])
words = ["HORSE","COW","DOG","ET"] # don't ask

我使用 numpy 因为我更习惯它而且它更容易在这里显示,但它肯定可以在常规列表理解中完成。在此之后,您的数组现在是一个 numpy 数组:

[['H' 'X' 'X' 'W' 'X' 'X' 'X' 'X' 'X' 'D']
['X' 'O' 'X' 'X' 'O' 'X' 'X' 'X' 'O' 'X']
['X' 'X' 'R' 'X' 'X' 'C' 'X' 'G' 'X' 'X']
['X' 'X' 'X' 'S' 'X' 'X' 'X' 'X' 'X' 'T']
['X' 'X' 'X' 'X' 'E' 'X' 'X' 'X' 'E' 'X']]

通过添加移动填充符对其进行转换:

leng = len(mearray)
def pad_with(vector, pad_width, iaxis, kwargs):
pad_value = kwargs.get('padder', '0')
vector[:pad_width[0]] = pad_value
vector[-pad_width[1]:] = pad_value
return vector
np.array([np.pad(mearray[i], (leng-i, i+1), pad_with) for i in range(leng)])

你的数组现在是:

[['0' '0' '0' '0' '0' 'H' 'X' 'X' 'W' 'X' 'X' 'X' 'X' 'X' 'D' '0']
['0' '0' '0' '0' 'X' 'O' 'X' 'X' 'O' 'X' 'X' 'X' 'O' 'X' '0' '0']
['0' '0' '0' 'X' 'X' 'R' 'X' 'X' 'C' 'X' 'G' 'X' 'X' '0' '0' '0']
['0' '0' 'X' 'X' 'X' 'S' 'X' 'X' 'X' 'X' 'X' 'T' '0' '0' '0' '0']
['0' 'X' 'X' 'X' 'X' 'E' 'X' 'X' 'X' 'E' 'X' '0' '0' '0' '0' '0']]

你可以清楚地看到 HORSECOW 被归一化了。您需要通过切换填充方向再次执行此操作,这样您将拥有 GODET:

反向:np.array([np.pad(mearray[i], (i+1, leng-i), pad_with) for i in range(leng)])

[['0' 'H' 'X' 'X' 'W' 'X' 'X' 'X' 'X' 'X' 'D' '0' '0' '0' '0' '0']
['0' '0' 'X' 'O' 'X' 'X' 'O' 'X' 'X' 'X' 'O' 'X' '0' '0' '0' '0']
['0' '0' '0' 'X' 'X' 'R' 'X' 'X' 'C' 'X' 'G' 'X' 'X' '0' '0' '0']
['0' '0' '0' '0' 'X' 'X' 'X' 'S' 'X' 'X' 'X' 'X' 'X' 'T' '0' '0']
['0' '0' '0' '0' '0' 'X' 'X' 'X' 'X' 'E' 'X' 'X' 'X' 'E' 'X' '0']]

现在您可以在矩阵中看到 GODET(上下颠倒)。您应该能够使用您的原始功能来检索它们。

关于python - 如何创建遍历列表所有对角线可能性的 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034876/

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