如何从持有价值的对象中递减?

How to decrement from an object that's holding a value?

我不知道如何从列表中的对象递减。

例如:

a = 1
b = 2
c = 3
lst = [a, b, c]
choice = a
choice = choice - 2

当我这样做时,它不会从 a

中扣除

您使用索引访问列表元素:

a = 1
b = 2
c = 3
list = [a, b, c]
choice = 0 # the index of `a`
lst[choice] -= 2

这不会更改 a 的值,因为整数在 python 中是不可变的。只有存储在列表中的引用会发生变化。

您可以使用 list.index 按值查找索引:

choice = lst.index(a)

如果您想按名称而不是按值搜索,请使用字典而不是列表:

d = {
    'a' = 1,
    'b' = 2,
    'c' = 3
}
d['a'] -= 2

这是一个有趣的问题,它促使我们思考 'object' 的含义。

例如,这里有一些代码可以按照您期望的方式操作 'objects':

a = [1]
b = [2]
c = [3]
lst = [a, b, c]
index_choice = 6 % 3 # some calculation that results in 0
choice = lst[index_choice]
choice[0] = choice[0] - 2
print(a)

输出:

[-1]

这里我们将 abc 初始化为对可变对象(在本例中为长度为 1 的列表)的引用,并初始化 lst成为这些对象引用的集合。

然后我们决定更新 lst 中某个位置 index_choice 的对象(假设它是位置 0,因为那是 a 引用的对象所在的位置) .我们使用语句 choice = lst[index_choice].

将对该对象的引用放在名为 choice 的变量中

然后我们修改对象属性的值:在本例中,索引为 0 的元素,它是 choice 引用的长度为 1 的列表中的唯一数字。我们使用赋值 choice[0] = choice[0] - 2.

修改这个属性

现在我们检查a,我们看到它的attribute的值(a引用的长度为1的列表中的唯一数字)已经更新从 1-1。这是因为 choicea 是对同一对象的不同引用,即初始化为 [1] 并且我们使用语句 choice[0] = choice[0] - 2.[=33 更新的列表=]

总而言之,我相信您在 objects 中所期望的确实可以在 Python 中实现,但它要求对象(或更具体地说,对象的属性)是就地修改,这对于不可变类型(例如整数)是不可能的,但对于可变类型(例如列表或 user-defined 类型的对象是可能的。