我在Python 2.7.3中遇到语法错误,如下所示:
[s += 'Orig' for s in strs]
File "<stdin>", line 1
[s += 'Orig' for s in strs]
^
SyntaxError: invalid syntax
其中strs只是一个字符串列表,如['a', 'b', 'c', 'd']
如果我将代码更改为:
[s + 'Orig' for s in strs]
然后它起作用:
['aOrig', 'bOrig', 'cOrig', 'dOrig']
这背后的原因是什么?是因为列表理解中的s不可变吗?但它应该是一个临时的对象,无论如何都会被丢弃,为什么不呢?
另外,做我想做的最有效的方法是什么?我查看了另一个链接:http://www.skymind.com/~ocrow/python_string/并试图使用join,但是join并没有按照我的意愿行事;它将字符串列表连接成一个字符串,而我想将一个字符串附加到字符串列表中。
答案 0 :(得分:7)
Python中的赋值(包括+=
)是一个语句,而不是表达式。您只能在列表推导中使用表达式。
+
的示例与您不希望它做的是什么?
答案 1 :(得分:7)
你不能这样做。 s += 'Orig'
是s = s + Orig
的简写,这是一项任务。为清楚起见,python不允许您将赋值语句放在其他语句中。有关详细信息,请参阅Python常见问题解答中的Why can’t I use an assignment in an expression?。
答案 2 :(得分:2)
嗯,你可以做到
strs = [s+'Orig' for s in strs]
或
strs = map(lambda s: s+'Orig', strs)
我发现列表理解(第一个)更容易阅读。
答案 3 :(得分:0)
你不能用它作为表达。只有通过语句中的赋值才能使用(+ =)符号。