python - 在多维数组中查找连续值 - python

标签 python arrays loops

我真的是 python 的新手。我需要一些有关多维数组的帮助。我正在为剧院制作座位预订系统。 (只是练习)。我设置了一个 5 行乘 10 座的矩阵。我真正需要做的就是为每个座位分配“可用”或“不可用”。我显然可以做到这一点,但我不知道该怎么做才能搜索或循环查看一行中是否有 6 个相邻的座位。任何帮助都会很棒。请记住,我是 python 的新手。

最佳答案

我能想到的最简单的方法是遍历行,跟踪行号作为 index

然后,我们对可用座位进行计数,直到找到连续六个座位或直到遇到一个不可用的座位(如果发生这种情况,我们会重置计数)。

seats = [[True, True, True, False, True, True, True, False, False, True],
         [True, True, True, True, True, True, True, False, False, True],
         [True, True, True, False, True, True, True, False, False, True],
         [True, True, True, False, True, True, True, False, False, True],
         [True, True, True, True, True, True, True, False, False, True]]

for index, row in enumerate(seats):
    consecutive_seats = 0
    for seat in row:
        if seat:
            consecutive_seats += 1
            if consecutive_seats >= 6:
                print('There are at least six seats available on row', index)
                break
        else:
            consecutive_seats = 0

进一步说明

  1. python enumerate函数允许您遍历 seats 序列,返回一个索引和该索引处的当前项。或者,您可以向它传递一个参数来设置起始索引(因此,如果您希望您的座位行从一开始,您可以改用以下内容:

    for index, row in enumerate(seats, start=1): ...
    

    事实上,这里发生的事情的细节很有趣:enumerate 返回一个包含两项的 Tuple。 (将其视为一个 不可变 – 不可更改的 – 列表),您正在将其拆包indexrow。然后,您可以像使用任何其他变量一样使用这两个变量。

  2. 对于每一对索引和行,您遍历该行并检查 seat 是否为 True(您可以,但不应该,写 seat == True – 这是冗余信息)。如果它是 True,您认为它可用并将可用连续座位的计数器增加一个。

  3. 紧接着,您需要检查是否找到了足够的空闲座位,在这种情况下您可以 break在循环之外,换句话说,您将跳过该行中的其余座位,因为您已经知道足够多的座位是免费的,并继续进行外循环的下一次迭代,这将产生下一行索引和行。

  4. 另一方面,如果座位为 False(不可用),则将连续可用座位的计数重置为零,但继续检查该行的其余部分。

建议的改进

  • 创建一个类 Seat 并给它一个属性 is_available
  • 引入常量以摆脱魔数(Magic Number)

关于python - 在多维数组中查找连续值 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644217/

相关文章:

python - 如何创建一个将行移动负 1 的 DataFrame,包括上面的行可能不存在的时间?

python - Clicker 占用了大量处理器时间 - python 3

javascript - 循环行/子结构

python - 方法可以在 Python 中有方法吗?

Python 监视文件夹 - 询问文件大小列表

JavaScript 匿名函数数组到 Java 的翻译

C 编程将字符数组复制到二维字符数组

c - 使用 C 将 CFG 从文件读取到链表中

java - 加法和减法

javascript - 为什么这个简单的 for 循环没有按预期工作?