Получить индекс в списке объектов по атрибуту в 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 
  • Как указать 2 ключа в сортировке (списке) python?
  • Как преобразовать числовые диапазоны строк в список в Python
  • python: пересмотр списка изменений в исходном списке
  • Неожиданное поведение списка в Python
  • Ротация списка Python
  • Python преобразует список пар в словарь
  • Убедитесь, что все значения в списке больше определенного номера
  • Изменить значения в кортеже / списке внутри списка в python?
  • Python - лучший язык программирования в мире.