2

我在 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 不符合我的要求;它将字符串列表连接到单个字符串中,而我想将字符串附加到字符串列表中。

4

4 回答 4

7

Python 中的赋值(包括+=)是语句,而不是表达式。您只能在列表推导中使用表达式。

你的例子+没有做你想让它做什么?

于 2012-06-15T21:34:26.840 回答
7

你不能这样做。s += 'Orig'是 的简写s = s + Orig,它是一个赋值。为清楚起见,python 不允许您将赋值语句放在其他语句中。请参阅为什么我不能在表达式中使用赋值?在 Python 常见问题解答中了解更多详细信息。

于 2012-06-15T21:36:53.457 回答
2

好吧,你可以做

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

或者

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

我发现列表理解(第一个)更容易阅读。

于 2012-06-15T21:46:19.737 回答
0

您不能将其用作表达式。只有通过语句中的赋值才能使用 (+=) 符号。

于 2012-06-15T21:35:21.807 回答