2012-06-15 3 views
2

я получаю ошибку синтаксиса в Python 2.7.3 так:питон ошибка синтаксиса строки оператор + =

[s += 'Orig' for s in strs] 
    File "<stdin>", line 1 
    [s += 'Orig' for s in strs] 
     ^
SyntaxError: invalid syntax 

где СПО это просто список строк, как ['a', 'b', 'c', 'd']

если изменить код чтобы:

[s + 'Orig' for s in strs] 

Тогда это работает:

['aOrig', 'bOrig', 'cOrig', 'dOrig'] 

В чем причина этого? Это потому, что s в понимании списка не изменяет? Но это должен быть временный объект, который в любом случае отбрасывается, так почему бы и нет?

Также, что является самым эффективным способом делать то, что я хочу сделать? Я посмотрел на другую ссылку: http://www.skymind.com/~ocrow/python_string/ и попытался использовать join, но join не делает то, что я хочу; он объединяет список строк в одну строку, тогда как я хочу добавить строку в список строк.

+2

Это не имеет смысла делать это там. Python нуждается в значении для ввода в список, а присваивание не возвращает значение. –

+0

Сводка списка предназначена для создания нового списка, а не для сокращения существующего списка. Если вы пытаетесь внести изменения в список на месте, это неправильный путь. –

+0

@SeanMcSomething: Мне нравится синтаксис LC настолько, что я бы хотел, чтобы они сделали! –

ответ

7

Вы не можете этого сделать. s += 'Orig' является сокращением для s = s + Orig, что является заданием. По соображениям ясности, python не позволяет размещать присваивающие утверждения внутри других операторов. Дополнительную информацию см. В разделе Why can’t I use an assignment in an expression? в Python FAQ.

+0

Спасибо! Исходя из фона C++, ссылка объясняет все это. – doorfly

7

Назначение в Python (включая +=) является выражением, а не выражением. Вы можете использовать выражения только в понимании списка.

Что ваш пример с + не делайте, что вы хотите?

0

Вы не можете использовать его в качестве выражения. Только через назначение в выражении можно использовать символ (+ =).

2

Ну, вы могли бы сделать

strs = [s+'Orig' for s in strs] 

или

strs = map(lambda s: s+'Orig', strs) 

Я нахожу список понимание (первый) легче читать.

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