Понимание понимания списка Python

#python #list #list-comprehension

#python #Список #понимание списка

Вопрос:

Я написал некоторый код с помощью справки и пытаюсь понять, что означает конкретная строка:

 rec = [f[0:-2] for f in List if f[-1] == i][0]
  

Я понимаю, что это понимание списка, которое принимает значения в списке, минус последние 2, когда равно другой переменной i.

Что [0] делать в этом случае?

Ответ №1:

Это неэффективный способ получить первый отфильтрованный элемент из результирующего объекта списка.

 [f[0:-2] for f in List if f[-1] == i]
  

это понимание списка, создающее новый объект списка. Затем этот объект индексируется с [0] помощью, чтобы получить первое значение.

Вы могли бы переписать его на:

 tmp = [f[0:-2] for f in List if f[-1] == i]
rec = tmp[0]
del tmp
  

и получите тот же результат.

Эффективным методом было бы использовать next() выражение генератора:

 rec = next(f[:-2] for f in List if f[-1] == i)
  

Это повторяется только List до тех f пор, пока не будет найдено первое, соответствующее тесту, вместо того, чтобы сначала создавать все такие соответствия, а затем снова отбрасывать объект списка.

Комментарии:

1. Спасибо, что это было очень хорошо объяснено. Я должен был упомянуть, что это часть цикла for, который повторяет другой список, поэтому, вероятно, более эффективен, чем я описал. Еще раз спасибо.