Python 连续项目的数组项目编号

Python 连续项目的数组项目编号,python,python-3.x,Python,Python 3.x,我正在尝试创建一个座位预订系统,该系统链接到一个CSV文件,并根据用户输入检查座位是否可用(需要座位和排数) 然后,用户指定的行被检索为行。B将返回: ['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B'] 其中0是自由座位,1是有人坐的座位。该字母表示该行 我使用下面的一行来检索数组中最大数量的连续零,从而获得最大的座位块 LargeBlock = max(sum(1 for _ in g) for k, g in groupby(li

我正在尝试创建一个座位预订系统,该系统链接到一个CSV文件,并根据用户输入检查座位是否可用(需要座位和排数)

然后,用户指定的行被检索为
。B将返回:

['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B']
其中0是自由座位,1是有人坐的座位。该字母表示该行

我使用下面的一行来检索数组中最大数量的连续零,从而获得最大的座位块

LargeBlock = max(sum(1 for _ in g) for k, g in groupby(line) if k == '0')

我还想返回座位号。因此,使用上面的示例,如果用户请求B行上的三个座位,它将输出B1-B3可用。关于如何根据用户输入和LargeBlock变量检索列表中项目的编号,有什么想法吗?

通常,查找最大的空闲座位组并不是很有用。例如,一个两人组可以容纳两个席位的间隙,他们可能更喜欢那些在另一组连续六个席位中占有一席之地的人。当你想把机器装满的时候,你可能更喜欢在你开始从那些更大的自由团体区域获得位置之前,提前填满那些难以填满的插槽

因此,我的解决方案不是让你成为最大的一组,而是让你拥有一排座位的所有组合

def getPossibleSeats (line, row, num):
    if row != line[-1]:
        raise ValueError('Invalid row')

    for k, g in groupby(enumerate(line[:-1], 1), lambda x: x[1]):
        g = list(g)
        if k != '0' or len(g) < num:
            continue

        for i in range(len(g) - num + 1):
            yield ['{}{}'.format(row, s) for s, _ in g[i:i+num]]
另一个例子是,它可能如下所示:

>>> line = ['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B']
>>> for seats in getPossibleSeats(line, 'B', 4):
        print(seats)

['B1', 'B2', 'B3', 'B4']
['B2', 'B3', 'B4', 'B5']
['B3', 'B4', 'B5', 'B6']
['B4', 'B5', 'B6', 'B7']
>>> line = list('11000110000001C')
>>> for seats in getPossibleSeats(line, 'C', 2):
        print(seats)

['C3', 'C4']
['C4', 'C5']
['C8', 'C9']
['C9', 'C10']
['C10', 'C11']
['C11', 'C12']
['C12', 'C13']

动态规划是你的朋友

您可以定义一个实用程序函数,该函数为您提供一个新行,其中每个座位列出了给定座位左侧的空闲座位数:

def-free_座椅(世界其他地区):
席位=[]
seats.append(如果行[0]=“0”则为1,否则为0)
对于范围(1,长度(行))中的k:
seats.append(如果第[k]='1'行,则为0,否则为1+座位[k-1])
返回座位
然后,使用空闲座位的数量来查找第一个可能的位置,行代码为:

def find_n_座椅(n,行):
行代码=行[-1]
可用座位=空闲座位(第[:-1]行)#删除行代码
尝试:
最后一个座位=可用座位。索引(n)
返回[行代码+str(i+1)表示范围内的i(最后一个座位+1-n,最后一个座位)]
除值错误外:
打印({1}行中找不到{0}个座位)。格式(n,行代码))
一无所获

上述功能应应用于每一行,直到找到匹配项。

请花一秒钟时间重新阅读您所写的内容,并尝试向不了解此问题的人员澄清。我不明白数组是如何与座舱编码系统相关的。@Victor'Chris'Cabral:我对你的评论有点困惑。我发现这个问题非常清楚。我道歉。['0','0','0','0','0','0','0','0','1','0','B']对我来说意义不大。也许我需要重读一遍,维克多,我支持你。我可以猜0和1,B是行字母标识符吗?还是什么?@Avempace 0表示空闲座位,1表示有人就座,B表示行字母标识符。