Python中字符串列表的问题

5 投票
5 回答
581 浏览
提问于 2025-04-15 14:11

为什么每次我这样做的时候,解释器不报语法错误呢:

my_abc = ['a',
          'b',
          'c'
          'd',]

我只是想把 'c' 加到字符串列表里,结果忘了加逗号。我本来以为这会引发某种错误,因为这明显是不对的。

但是,我得到的是:

>>> my_abc
 ['a', 'b', 'cd']

而这从来不是我想要的结果。

为什么它会自动连接在一起呢?我都快数不过来我因为这个行为吃了多少亏。

有没有什么办法可以解决这个问题呢?

为了澄清一下*:我其实不介意自动连接,我的问题仅仅和字符串列表有关,因为它们不仅仅是用来存文本的,还是用来控制流程、传递字段名以及其他很多事情。

5 个回答

6

这是故意这样设计的。比如说,它可以让你在多行中写很长的字符串,而不需要用加号(+)来连接。

13

这被称为“隐式字符串连接”,有一个提案(PEP)想要取消这个功能,但这个提案被拒绝了。你可以在这里查看这个提案的详细信息:http://www.python.org/dev/peps/pep-3126/

3

正如其他人所说,这是设计使然。

为什么会这样呢?主要是历史原因:C语言也是这样做的。

在某些情况下,这样做很方便,因为它减少了语法上的杂音,避免了不必要的空格(比如内联的SQL查询、复杂的正则表达式等等)。

那么你能做些什么呢?其实没什么太多的办法,但如果这种情况经常发生在你身上,可以试试以下几个小技巧。

  • 在每行的开头加上逗号来缩进你的列表。听起来有点奇怪,但这样一来,缺少的逗号就会变得很明显。
  • 把字符串赋值给变量,尽量使用变量列表(这样做通常也是个好主意,因为可以避免重复的字符串)。
  • 拆分你的列表:对于单词列表,你可以把整个列表放在一个字符串里,然后像下面这样拆分。对于超过5个元素的列表,这样做也更简洁。

    'a b c d e'.split(' ').

撰写回答