2012-06-15 101 views
2

我得到一個語法錯誤在Python 2.7.3像這樣:Python字符串語法錯誤+ =操作

[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/並嘗試使用連接,但連接不做我想要的;它將一串字符串連接成單個字符串,而我想將一個字符串附加到一個字符串列表中。

+2

這樣做沒有意義。 Python需要一個值放入列表中,並且賦值不會返回值。 –

+0

列表解析旨在創建一個新列表,而不是修改現有列表的簡寫。如果您試圖對列表進行就地修改,則這是錯誤的方法。 –

+0

@SeanMcSomething:我非常喜歡LC的語法,所以我希望他們這樣做! –

回答

7

你不能這樣做。 s += 'Orig's = s + Orig的簡寫,這是一項任務。爲了清晰起見,python不允許你在其他語句中放置賦值語句。有關更多詳細信息,請參閱Python FAQ中的Why can’t I use an assignment in an expression?

+0

謝謝!來自C++背景的鏈接解釋了這一切。 – doorfly

7

Python中的賦值(包括+=)是一個語句,而不是表達式。你只能在列表理解中使用表達式。

你的+的例子不是你想要的嗎?

0

你不能用它作爲表達式。只有通過聲明中的分配才能使用(+ =)符號。

2

嗯,你可以做

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

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

我找到列表解析(第一個)更易於閱讀。