Получить индекс в списке объектов по атрибуту в Python

У меня есть список объектов с идентификатором атрибута, и я хочу найти индекс объекта с определенным идентификатором. Я написал что-то вроде этого:

index = -1 for i in range(len(my_list)): if my_list[i].id == 'specific_id' index = i break 

но это выглядит не очень хорошо. Есть ли лучшие варианты?

4 Solutions collect form web for “Получить индекс в списке объектов по атрибуту в Python”

Используйте enumerate когда вы хотите как значения, так и индексы в цикле for :

 for index, item in enumerate(my_list): if item.id == 'specific_id': break else: index = -1 

Или, как выражение генератора:

 index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1) 

Вы можете использовать enumerate :

 for index, item in enumerate(my_list): if item.id == 'specific_id': break 

Вот альтернатива, которая не использует (явный) цикл, с двумя разными подходами к генерации списка значений «id» из исходного списка.

 try: # index = map(operator.attrgetter('id'), my_list).index('specific_id') index = [ x.id for x in my_list ].index('specific_id') except ValueError: index = -1 

Если предположить,

 a = [1,2,3,4] val = 3 

Делать

 a.index(val) if val in a else -1 
  • Убедитесь, что все значения в списке больше определенного номера
  • Создание циклических перестановок / уменьшенных латинских квадратов в Python
  • Инициализация списка Python с использованием операторов множественного диапазона
  • Присвоить значение списку с использованием нотации среза с цессионарием
  • Как использовать быструю сортировку для сортировки по индексу в списке списка
  • (Python) Список индексов вне диапазона - итерация
  • Python sort () первый элемент списка
  • Разделение вложенного списка на два списка
  • Как перенести первые N элементов из генератора или списка в Python?
  • Перечень списков списка Python
  • Список каталогов Python возвращается в шаблон Django
  • Python - лучший язык программирования в мире.