Adding a string to a list
1 2 3 4 5 6 | >>> b = [] >>> c = '1234' >>> b += c >>> b ['1', '2', '3', '4'] >>> |
这里发生了什么?这不应该奏效,对吧?或者我错过了一些明显的东西?
1 2 3 4 5 6 7 8 | >>> b = [] >>> c = '1234' >>> b + c Traceback (most recent call last): File"<pyshell#7>", line 1, in <module> b + c TypeError: can only concatenate list (not"str") to list >>> |
号
那么,
字符串是不可重复的:元素是字符串的字符。将iterable添加到列表中时,iterable的元素将附加到列表中。
以下任一项将按您的期望执行(即追加字符串,而不是用字符串的字符扩展列表):
1 | b += [c] |
或
1 | b.append(c) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> b = [] >>> c ="1234" >>> b.append(c) >>> b ['1234'] >>> b.extend(c) >>> b ['1234', '1', '2', '3', '4'] >>> b += c >>> b ['1234', '1', '2', '3', '4', '1', '2', '3', '4'] >>> b += [c] >>> b ['1234', '1', '2', '3', '4', '1', '2', '3', '4', '1234'] |
这不是对最初的问题的回答(我认为已经得到了充分的回答),而是对关于增广赋值(
简而言之:对于可变类型,增强赋值的效果与不可变类型不同。
1 2 3 4 5 6 7 | >>> a = (1, 2) >>> b = a >>> a += (3, 4) >>> a (1, 2, 3, 4) >>> b (1, 2) |
大多数其他类型,包括
1 2 3 4 5 6 7 | >>> a = [1, 2] >>> b = a >>> a += [3, 4] >>> a [1, 2, 3, 4] >>> b [1, 2, 3, 4] |
而如果第三行被
对于用户定义的类,语义取决于它是如何实现的,但这是根据PEP203应该如何实现的。
+=是扩展的语法甜头,但+只是列表连接。如果扩展,您将遍历参数,在本例中,该参数是一个字符串。但不能将字符串连接到列表,因此+失败。
字符串是一系列字符。列表操作
(实际上,
实际上,列表上的+=运算符将检索C的迭代器,它将按顺序生成各个字符。如果您打算将实际字符串添加到列表中,并生成结果['1234'],则可以改用b.append('1234')。
你期待什么?如果要添加C作为字符串,必须执行以下操作:
1 | b.append(c) |
干杯!