【问题标题】:Calculating how many symbols in surrounding squares in 2d list python计算二维列表python中周围正方形中有多少个符号
【发布时间】:2020-06-22 12:16:17
【问题描述】:

我在 python 课程介绍中有一个作业,我必须使用循环创建一个通过 2d 列表的函数,当给定 x 和 y 坐标时,它会计算所选的周围正方形中有多少“N”一。 x 和 y 可以在任何地方,并且不允许它们越过列表的边界。由于某种原因,课程材料似乎非常缺乏,我找不到任何可以帮助我入门的东西。我应该如何使该功能正常工作?

函数的参数必须是 (x, y, list) 该功能应该假设您不在“N”上,但如果您在,它也算在内。

如果有人可以给我一些关于如何开始的提示,那就太好了。

list = [['N', ' ', ' ', ' ', ' '],
        ['N', 'N', 'N', 'N', ' '],
        ['N', ' ', 'N', ' ', ' '],
        ['N', 'N', 'N', ' ', ' '],
        [' ', ' ', ' ', ' ', ' '],
        [' ', ' ', ' ', ' ', ' ']]

     

【问题讨论】:

    标签: python list loops 2d


    【解决方案1】:

    从问题中不清楚提供的 x 和 y 坐标是否是边缘周围的元素,相邻元素少于 8 个。

    如果 x 坐标的范围是 1len(row) - 1 并且 y 坐标的范围是 1len(column)-1 那么您可以循环遍历 2d 列表中的每一行,然后遍历 2d 列表中的每个元素该行,然后检查该元素是否等于'N'。可以这样解决:

    def adjacent_count(x, y, list_2d):
        count = 0
        for row in list_2d[x-1:x+2]:
            for element in row[y-1:y+2]:
                if element == 'N':
                    count += 1
        return count
    

    或者在一行中使用列表推导:

    def adjacent_count(x, y, list_2d):
        return sum([1 if element == 'N' else 0 for row in list_2d[x-1:x+2] for element in row[y-1:y+2]])
    

    编辑:现在知道 x 和 y 坐标的范围可以从 0len(rows)len(cols) 并且该函数不应该换行到数组的另一侧,可以使用以下代码。现在,代码会在尝试访问之前检查下一个数组元素是否超出列表的范围。

    def adjacent_count(x, y, list_2d):
        no_rows, no_cols = len(list_2d), len(list_2d[0])
        count = 0
        for i in range(x-1, x+2):
            for j in range(y-1, y+2):
                if i < no_cols and j < no_rows:
                    if list_2d[j][i] == 'N':
                        count += 1
        return count
    

    【讨论】:

    • 很抱歉,任务非常大,忘记提供该信息。给定的 x 和 y 可以在中心并且有 8 个相邻元素,但它也可以在小于 8 的边缘上。如果它在边缘上,它应该留在列表的边界内而不是在列表之外检查或去另一边。
    • 感谢您的成功。它从另一边泄漏,所以我补充说 i 和 j 应该是 0
    【解决方案2】:

    从这段代码你可以算出列表中有多少个 N:

    list_ = [['N', ' ', ' ', ' ', ' '],
            ['N', 'N', 'N', 'N', ' '],
            ['N', ' ', 'N', ' ', ' '],
            ['N', 'N', 'N', ' ', ' '],
            [' ', ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ']]
    count = 0
    for a in list_:
        for b in a:
            if b == 'N':
                count += 1
    print(count)
    

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2014-03-10
      • 2021-03-13
      • 1970-01-01
      • 2011-12-05
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多