我真的是 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
进一步说明
python
enumerate
函数允许您遍历seats
序列,返回一个索引和该索引处的当前项。或者,您可以向它传递一个参数来设置起始索引(因此,如果您希望您的座位行从一开始,您可以改用以下内容:for index, row in enumerate(seats, start=1): ...
事实上,这里发生的事情的细节很有趣:
enumerate
返回一个包含两项的Tuple
。 (将其视为一个 不可变 – 不可更改的 – 列表),您正在将其拆包到index
和row
。然后,您可以像使用任何其他变量一样使用这两个变量。对于每一对索引和行,您遍历该行并检查
seat
是否为True
(您可以,但不应该,写seat == True
– 这是冗余信息)。如果它是True
,您认为它可用并将可用连续座位的计数器增加一个。紧接着,您需要检查是否找到了足够的空闲座位,在这种情况下您可以
break
在循环之外,换句话说,您将跳过该行中的其余座位,因为您已经知道足够多的座位是免费的,并继续进行外循环的下一次迭代,这将产生下一行索引和行。另一方面,如果座位为
False
(不可用),则将连续可用座位的计数重置为零,但继续检查该行的其余部分。
建议的改进
- 创建一个类
Seat
并给它一个属性is_available
- 引入常量以摆脱魔数(Magic Number)
关于python - 在多维数组中查找连续值 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644217/