TypeError:列表索引必须是整数或切片,而不是Slot

时间:2019-05-14 18:21:54

标签: python

我正在尝试访问包含类实例的列表的值

这就是我将元素存储在列表中的方式

class Slot:
    def __init__(self, slot, available):
        self.slot = slot
        self.available = available

for i in range(rangeHours):
    timeSlots.append(i)
    timeSlots[i] = Slot(hours[i],free[i])

这是给我一个错误的代码

for call in calls:
    if call == 1:
        for i in timeSlots:
            if timeSlots[i].available == True:
                patient[i] = Patient(timeSlots[i].slot)
                timeSlots[i].available == False

错误代码:

如果timeSlots [i] .available == True: TypeError:列表索引必须是整数或切片,而不是Slot

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您应该使用 dict 而不是 list 。您也可以将 list 用于相同的目的,但不能用于构造代码。为什么?让我们详细了解您在做什么:

# Lets say you have an empty list:

time_slots = []

您遍历整数并将其附加到列表中

for i in range(rangeHours):
    time_slots.append(i)

第一次迭代后,您将列出:

# time_slots = [0]

然后,您将访问刚刚使用它作为索引附加的相同元素:

# time_slots[0] = 0 , which in this case, the element you accessed is 0

然后您将此元素更改为您的 Slot 类:

# time_slots[0] = Slot(hours[0],free[0])

这将直接覆盖您刚刚放入列表中的内容。简而言之,time_slots.append(i)无效。

我认为您应该改用 dict

time_slots = {}
for i in range(rangeHours):
    time_slots[i] = Slot(hours[i],free[i])

那么您可以做:

for call in calls:
    if call == 1:
        for slot_index, slot_class in time_slots.items():
            if slot_class.available == True:
                patient[slot_index] = Patient(slot_class.slot)
                slot_class.available == False