2014-06-25 5 views
0

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

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

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

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

ответ

3

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

[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() с generator expression:

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

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

+0

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

Смежные вопросы