«индексы списка должны быть целыми числами или срезами, а не [пользовательский класс]», но я указываю экземпляр класса int?

У меня есть собственный класс, определенный так:

class points:
    def __init__(self, x=0, h=0, l=0):
        self.x = x
        self.h = h
        self.l = l #bool location, 0 for start point, 1 for endpoint

Далее в моем коде я успешно создаю список этих points, и ошибка возникает, когда я пытаюсь выполнить следующее условное выражение:

for i in points_list:
    if (sorted_points[i].l == 0):

Python думает, что sorted_points[i].l не является целым числом или срезом (он думает, что это points объект), но единственное, что может быть, это целое число (я даже пытаюсь распечатать список значений sorted_pointsl, и все они равны 1 или 0 ), так что я очень запутался.

Вы используете i в качестве индекса для sorted_points. Как вы думаете, что такое i?

khelwood 22.04.2022 23:48
Python считает, что sorted_points[i].l не является целым числом или срезом. Нет, он считает, что i не является целым числом или срезом. points_list — это список точек, поэтому i — это точка.
Barmar 22.04.2022 23:50

Даже если i является индексом, зачем вам перебирать один список и использовать его в качестве индексов в другом списке, если только два списка не связаны параллельно. Но sorted_points предположительно упорядочен не так, как points_list.

Barmar 22.04.2022 23:51
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
3
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синтаксис for el in my_list перебирает элементы my_list. Смотреть:

class A:
    pass

l = [A(), A(), A()]
for el in l:
    print(type(el)) # <class '__main__.A'>

Так что в вашем случае вы должны использовать свой i в качестве экземпляра точки.

for i in points_list:
    if i.l == 0: # if it's boolean, you should even write if not i.l
        ...

Если вы хотите перебирать индексы, используйте range

for i in range(len(points_list)):
    if not sorted_points[i].l:
        ...

Другие вопросы по теме