Вопрос:

Python: печатать я для меня в списке

python

14701 просмотра

7 ответа

14 Репутация автора

Когда я печатал список, я получил синтаксическую ошибку при использовании этого метода:

print i for i in [1,2,3]

Я знал, что это нормально при использовании этого метода:

for i in [1, 2, 3]:
    print i

и я знал это

(i for i in [1, 2, 3])

это объект генератора, но я просто не понимаю, почему

print i for i in [1, 2, 3] 

не работает Кто-нибудь может дать мне подсказку?

Автор: Rain Zeng Источник Размещён: 20.12.2012 08:09

Ответы (7)


7 плюса

170421 Репутация автора

Синтаксис понимания списка x for x in ... требует скобок вокруг него. Это синтаксическое правило Python, такое же, как требование отступа или двоеточие после ifили что-то еще. i for i in [1, 2, 3]сам по себе недопустимый синтаксис. Вам нужно либо [i for i in [1, 2, 3]](для понимания списка), либо (i for i in [1, 2, 3])(для понимания генератора).

Автор: BrenBarn Размещён: 20.12.2012 08:11

0 плюса

60046 Репутация автора

Как expression(в грамматике):

  • [i for i in [1, 2, 3]] это понимание списка
  • (i for i in [1, 2, 3]) является генератором выражения.
  • Но i for i in [1, 2, 3]само по себе это синтаксическая ошибка, и это именно так. Там должно быть что-то окружающее. Если у вас нет (или [вокруг него, это не является действительным expression, потому что forключевое слово не является действительным в этой точке.

Внутри оператора печати , он хочет expression.

(Как красная сельдь, func(i for i in [1, 2, 3])допускается как выражение, являющееся вызовом функции с первым аргументом, являющимся выражением генератора.)

Автор: Chris Morgan Размещён: 20.12.2012 08:12

1 плюс

33572 Репутация автора

Это неверный синтаксис Python. i for i in [1, 2, 3]Действительна только в виде списка или генератора понимания, то есть. в окружении []или ()соответственно.

Вы хотите использовать:

print '\n'.join(str(i) for i in [1, 2, 3])
Автор: Sylvain Defresne Размещён: 20.12.2012 08:13

1 плюс

254131 Репутация автора

Решение

В Python 2 printэто оператор, а не выражение или функция, поэтому вы не можете использовать его непосредственно в понимании. Используйте этот трюк:

def f(x): print x
[f(i) for i in [1,2,3]]

Обратите внимание, что (f(i)...)это не работает, потому что это просто создает генератор, который будет вызывать, f()если вы итерируете его. Понимание списка []фактически вызывает f().

[EDIT] Если вы используете Python> 2.6, вы можете достичь того же, используя

from __future__ import print_function
[print(i) for i in [1, 2, 3]]

Обратите внимание на ()аргумент print.

Автор: Aaron Digulla Размещён: 20.12.2012 08:14

0 плюса

745721 Репутация автора

Синтаксис понимания списка ( [expression for loop]) - это сокращенный синтаксис цикла для создания списка .

Вы не создаете список, вы хотите напечатать элементы в цикле. Поскольку вы не создаете список Python, вы должны использовать обычный цикл.

В качестве альтернативы, поскольку все, что вы делаете, это печатаете элементы в отдельных строках, просто добавьте новые строки самостоятельно:

print '\n'.join(i for i in [1, 2, 3])

Это дает тот же результат, что и:

for i in [1, 2, 3]:
    print i
Автор: Martijn Pieters Размещён: 20.12.2012 08:15

0 плюса

42401 Репутация автора

Печать - это не функция, это утверждение, и вы не можете иметь их в выражениях. Просто используйте обычный цикл, так как вы не хотите создавать список, как это делает понимание списка. Теоретически вы можете сделать ( не то, что вы должны. Вообще ):

from __future__ import print_function
[print(my_item) for my_item in [1,2,3,4]]


1
2
3
4
Out[26]:
[None, None, None, None]
Автор: root Размещён: 20.12.2012 08:24

0 плюса

1319 Репутация автора

Идеальное руководство для List-ComprehensionsPython 3: https://www.digitalocean.com/community/tutorials/understanding-list-comprehensions-in-python-3

Автор: ofir_aghai Размещён: 13.06.2019 05:06
Вопросы из категории :
32x32