如何将值添加到多个范围?

时间:2018-06-19 10:49:20

标签: python list

我正在尝试制作一段将输入范围放入预定义范围的代码。它会检查startend,然后使用相应的实例编号递增range变量。下面的代码会增加前两个range.number变量,但它也应该递增第三个变量,因为input1的结束小于range3的结束。我怎样才能做到这一点?

class Range:
    def __init__(self, start, end, number):
        self.start = start
        self.end = end
        self.number = number
    def __str__(self):
        return "%s, %s, %s" % (self.start, self.end, self.number)
class Input:
    def __init__(self, start, end):
        self.start = start
        self.end = end
    def __str__(self):
        return "%s, %s" % (self.start, self.end)

range1 = Range(1,5,0)
range2 = Range(5,8,0)
range3 = Range(8, 15, 0)

rangesArray = []
rangesArray.append(range1)
rangesArray.append(range2)
rangesArray.append(range3)

input1 = Input(2, 14)

# print(range1)
# print(input1)


# print(rangesArray[0], rangesArray[1])
for i in range(len(rangesArray)):
    if input1.start >= rangesArray[i].start:
        rangesArray[i].number += 1
        if input1.end > rangesArray[i].end:
            rangesArray[i+1].number += 1
print(rangesArray[0].number, rangesArray[1].number, rangesArray[2].number)'

2 个答案:

答案 0 :(得分:0)

问题是input1.startrangesArray[i]的任何i >= 2少,所以你只在第一次迭代时输入了if。 如果你将第二个条件设置在第一个条件之外,你可以解决它:

for i in range(len(rangesArray)):
    if input1.start >= rangesArray[i].start:
        rangesArray[i].number += 1
    if input1.end > rangesArray[i].end:
        rangesArray[i+1].number += 1
print(rangesArray[0].number, rangesArray[1].number, rangesArray[2].number)

答案 1 :(得分:0)

@Aviad Levy的解决方案可以很好地解决您的问题。 但我想对其做些修改。

如果您的输入在最后一次迭代中满足第二个条件,则代码将引发IndexError: list index out of range。因为列表中没有剩余元素可以增加数量。 以下代码将有助于解决该问题。

for i in range(len(rangesArray)):
    if input1.start >= rangesArray[i].start: 
        rangesArray[i].number += 1
    if input1.end > rangesArray[i].end and i!= len(rangesArray)-1: #condition to ensure that list index doesn't go out of range
        rangesArray[i+1].number += 1