python-3.x 尝试使用变量作为索引,但不起作用

dw1jzc5e  于 2023-05-23  发布在  Python
关注(0)|答案(5)|浏览(123)

在Python中,我试图使'number'x指向列表中完全相同的数字(这可能听起来很愚蠢,但这是我试图实现的简化版本)。
但是,由于某种原因,索引假设x仍然是1而不是2(它在x += 1之后)

list = [0, 1, 2, 3, 4]

x = 1

number = list[x]

print(number)
x += 1

print(number)
print(x)

有人知道我哪里做错了吗?
我对这一切都很陌生。
我期望输出1 2 2,但我得到了1 1 2

uhry853o

uhry853o1#

正如其他人指出的那样,重新分配x不会自动重新分配number
一般来说,有两个变量需要同时重新赋值,这很容易让你感到困惑--如果你在更新了一个变量后忘记更新另一个变量,你的程序中很可能会有一个bug,然后你需要到处寻找,找出这两个变量在什么时候分开了。
一个更好的方法通常是有一个单一的值(一个单一的“真理来源”),然后使用一个函数,将自动计算出相关的值。在OOP上下文中,你经常通过定义一个@property来做到这一点,但你也可以用一个普通的旧函数来做到这一点:

numbers = [0, 1, 2, 3, 4]

x = 1
def number():
    return numbers[x]

print(number())
x += 1

print(number())
print(x)

打印:

1
2
2

请注意,由于number是一个函数,因此需要调用它(即number())以获得期望值。调用该函数会导致numbers[x]被重新计算,从而得到number的更新值。

mitkmikd

mitkmikd2#

lst = [0, 1, 2, 3, 4]  # do not use list as a variable name

x = 1

number = lst[x]   # number got the value 1 from lst[1]

print(number)

x += 1           # x is incremented by 1

number = lst[x]  # add this line to change number, now it is lst[2]

print(number)
print(x)

#output
1
2
2
gt0wga4j

gt0wga4j3#

在这里,我们确实增加了x的值,但是变量number仍然有1。我们必须再次重新分配它以获得值2。
代码:

listOfNumbers = [0, 1, 2, 3, 4]

value = 1

matchingNumber = listOfNumbers[value]

print(matchingNumber)
value += 1
matchingNumber = listOfNumbers[value]
print(matchingNumber)
print(value)

输出:

1
2
2

注意:请不要使用list作为变量名,因为它会掩盖内置名称list

s8vozzvw

s8vozzvw4#

代码如下:

lst = [0, 1, 2, 3, 4]

x = 1

number = lst[x]  # Assign the value at index 1 (1) to number
print(number)  # Output: 1

x += 1  # Increment the value of x by 1

number = lst[x]  # Reassign number with the updated value at index 2 (2)
print(number)  # Output: 2

print(x)  # Output: 2 (x has been incremented)
ktecyv1j

ktecyv1j5#

在分配number后更改x不会更改number。为了获得预期的结果,您必须在x更改后重新分配number

list_num = [0, 1, 2, 3, 4] 
x = 1
number = list_num[x] 
print(number) 
x += 1 
number = list_num[x]
print(number) 
print(x)

编辑:不应该使用list作为变量名

相关问题