2015-08-02 7 views
0

Я не работал в Python через несколько лет, и я пытаюсь понять, что означает конкретное понимание списка.Попытка расшифровать понимание списка Python

Вот код:

cols = [i for i, col in enumerate(desc) if col[0].startswith('word')] 

Я смотрю на постижение странице списка в документации на Python, и я ничего, что бы описать то, что имея запятая, а затем отдельное заявление означало бы не видеть.

Как этот код рассмотрит понимание не списка?

+0

Это не запятая и отдельное заявление; это распаковка кортежа. Подумайте, 'i, col = item'. (Или 'для i, col в enumerate (desc): ...') – Ryan

+0

Прочитайте 'i, col' как кортеж' (i, col) '. Потому что enumerate() возвращает список кортежей из 2 элементов. – meuh

ответ

4

Как этот код будет выглядеть без перечня?

cols = [] 
for i, col in enumerate(desc): 
    if col[0].startswith('word'): 
     cols.append(i) 
+0

Получил это. В основном я захватываю значения внутри кортежа, созданного путем перечисления. –

0

Это просто зависит от количества значений внутри итерации, которые вы перебираете через него. Таким образом, ключевое слово for может сопровождаться произвольным именем переменной.

И в этом случае с enumerate() содержит элементы итерации с указанным индексом 2 переменной i, col.

Для получения дополнительной информации о Iterable распаковки чтения PEP 3131 https://www.python.org/dev/peps/pep-3132/

Кортеж (или список) на левой стороне простого присваивания (распаковка не определена для дополненного назначения) может содержать не более одного выражения вставляться перед с единственной звездочкой (которая в дальнейшем называется «отмеченным» выражением, в то время как другие выражения в списке называются «обязательными»). Это обозначает подвыражение, которому будет присваиваться список всех элементов из распакованного итеративного файла, которые не назначены ни одному из обязательных выражений, или пустой список, если таких элементов нет.

1
cols = [i for i, col in enumerate(desc) if col[0].startswith('word')] 

является "короток для"

cols = [] 
for i, col in enumerate(desc) 
    if col[0].startswith('word'): 
     cols.append(i) 

Таким образом, вы должны прочитать запятая не как разделение заявлений, но как разделение значений (например, life, universe, everything = the_answer или li = [4, 2])

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