Предположим, у меня есть такой список:
mylist = ["a","b","c","d"]
Чтобы напечатать значения вместе с их индексом, я могу использовать enumerate
функцию Python, подобную этой
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Теперь, когда я пытаюсь использовать его внутри, list comprehension
он дает мне эту ошибку
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Итак, мой вопрос: как правильно использовать enumerate внутри списка?
,
не()
. Таким образом, "помещатьi,j
в кортеж" не имеет смысла, посколькуi,j
это уже кортеж! Проблема в том, что синтаксическому анализатору списка нужны скобки для группы операторов.Чтобы быть действительно ясным, это не имеет ничего общего
enumerate
и полностью связано с синтаксисом понимания списка.Это понимание списка возвращает список кортежей:
это список изречений:
список списков:
синтаксическая ошибка:
Что непоследовательно (ИМХО) и сбивает с толку синтаксис словаря:
И набор кортежей:
Как заявил Оскар Лопес, вы можете просто передать кортеж перечисления напрямую:
источник
Или, если вы не настаиваете на использовании списка:
источник
Если вы используете длинные списки, кажется, что их понимание происходит быстрее, не говоря уже о более удобочитаемом.
источник
[t for t in enumerate(my list)]
еще быстрее.Вот как это сделать:
В качестве альтернативы вы можете:
Причина, по которой вы получили ошибку, заключалась в том, что вам не хватало ()
i
и выj
сделали его кортежем.источник
Четко говорите о кортежах.
источник
Всем отличный ответ, ребята. Я знаю, что вопрос здесь относится к перечислению, но как насчет чего-то вроде этого, просто другой точки зрения
Он становится более мощным, если нужно перебирать несколько списков параллельно с точки зрения производительности. Просто мысль
источник