相关疑难解决方法(0)

Python在列表上追加()与+运算符,为什么这些会给出不同的结果?

为什么这两个操作(append()分别+)给出不同的结果?

>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>> 
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,实际上存在无限递归.c[-1]并且c是一样的.为什么它与+操作不同?

python list append nested-lists

100
推荐指数
5
解决办法
9万
查看次数

元组:+ =运算符抛出异常,但是成功了吗?

为什么以下抛出异常,虽然它成功了?

>>> t = ([1, 2, 3], 4)
>>> t[0] += [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
([1, 2, 3, 1], 4)
>>> 
Run Code Online (Sandbox Code Playgroud)

python tuples

17
推荐指数
2
解决办法
538
查看次数

为什么+ = Python元组中的列表会引发TypeError但是仍然会修改列表?

我刚看到一些非常奇怪的东西.

>>> t = ([],)
>>> t[0].append('hello')
>>> t
(['hello'],)
>>> t[0] += ['world']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(['hello', 'world'],)
Run Code Online (Sandbox Code Playgroud)

为什么它会提升TypeError并改变list内部tuple

python

16
推荐指数
2
解决办法
770
查看次数

更新元组中的列表

我只是在翻译中玩弄并碰到了一些我不理解的东西.当我创建一个列表作为元素之一的元组,然后尝试更新该列表时,会发生一些奇怪的事情.例如,当我运行这个时:

tup = (1,2,3,[4,5])
tup[3] += [6]
Run Code Online (Sandbox Code Playgroud)

我明白了:

TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

这正是我的预期.然而,当我再次引用元组时,我得到:

>>> tup
(1, 2, 3, [4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

所以即使python引发异常,列表实际上也已更新.这是如何运作的?我无法想象我实际上想要做这样的事情,但我仍然想了解发生了什么.谢谢.

python

12
推荐指数
1
解决办法
647
查看次数

不可变容器内的可变类型

我对修改元组成员有点困惑.以下不起作用:

>>> thing = (['a'],)
>>> thing[0] = ['b']
TypeError: 'tuple' object does not support item assignment
>>> thing
(['a'],)
Run Code Online (Sandbox Code Playgroud)

但这确实有效:

>>> thing[0][0] = 'b'
>>> thing
(['b'],)
Run Code Online (Sandbox Code Playgroud)

还有效:

>>> thing[0].append('c')
>>> thing
(['b', 'c'],)
Run Code Online (Sandbox Code Playgroud)

不起作用,并且有效(嗯?!):

>>> thing[0] += 'd'
TypeError: 'tuple' object does not support item assignment
>>> thing
(['b', 'c', 'd'],)
Run Code Online (Sandbox Code Playgroud)

看似与以前相同,但有效:

>>> e = thing[0]
>>> e += 'e'
>>> thing
(['b', 'c', 'd', 'e'],)
Run Code Online (Sandbox Code Playgroud)

那么,当你能够并且不能修改元组内的某些内容时,游戏的规则到底是什么?它似乎更像禁止使用赋值成员的赋值运算符,但最后两个案例让我感到困惑.

python tuples list mutable immutability

10
推荐指数
2
解决办法
593
查看次数

Python中的元组赋值,这是Python中的错误吗?

我正在阅读这篇有趣的帖子https://asmeurer.github.io/blog/posts/tuples/

脚注作者提出了这个例子

>>> t=1,2,[3,4]
>>> t
(1, 2, [3, 4])
>>> t[2]+=[5,6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

虽然Python已经引发了异常但它确实改变了元组

>>> t
(1, 2, [3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

不确定这里发生了什么,这是一个错误吗?

2.7.10和3.5.1中的行为相同

python tuples list python-2.7 python-3.x

8
推荐指数
1
解决办法
596
查看次数

更新元组内的列表

如果我在元组中有一个列表,然后尝试将该列表与另一个列表连接起来,我会得到一个例外:

>>> a = ([1], [2])
>>> a[1] += [3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

这是预期的:连接是创建一个新列表,元组是不可变的.但是,尽管有例外,元组已更新:

>>> print(a)
([1], [2, 3])
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

python list python-3.x

3
推荐指数
1
解决办法
48
查看次数