Trying to use a variable as an index but it won’t work.

huangapple go评论97阅读模式
英文:

Trying to use a variable as an index but it won't work

问题

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

In Python I'm trying to make it so that 'number' points to the exact same number in the list as x (this probably sounds stupid but its a simplified version of what I'm trying to accomplish).

But, for some reason the index assumes x is still 1 instead of 2 (which it is after x += 1)

  1. list = [0, 1, 2, 3, 4]
  2. x = 1
  3. number = list[x]
  4. print(number)
  5. x += 1
  6. print(number)
  7. print(x)

Anyone know what I'm doing wrong?

I'm pretty new to all of this.

I expect an output of 1 2 2 but I got 1 1 2

答案1

得分: 1

在这个示例中,我们确实增加了变量 x 的值,但变量 number 仍然包含1。我们必须重新分配它以获得值2。

代码:

  1. listOfNumbers = [0, 1, 2, 3, 4]
  2. value = 1
  3. matchingNumber = listOfNumbers[value]
  4. print(matchingNumber)
  5. value += 1
  6. matchingNumber = listOfNumbers[value]
  7. print(matchingNumber)
  8. print(value)

输出:

  1. 1
  2. 2
  3. 2

注意:请不要将 list 作为变量名,因为它会遮蔽内置名称 list

英文:

In this, we do increment the value of x, but the variable number still have 1 in it. We have to reassign it again to get the value 2.

Code :

  1. listOfNumbers = [0, 1, 2, 3, 4]
  2. value = 1
  3. matchingNumber = listOfNumbers[value]
  4. print(matchingNumber)
  5. value += 1
  6. matchingNumber = listOfNumbers[value]
  7. print(matchingNumber)
  8. print(value)

Output :

  1. 1
  2. 2
  3. 2

NB: Please do not use list as a variable name, because it overshadows the built-in name list.

答案2

得分: 1

lst = [0, 1, 2, 3, 4] # 不要使用"list"作为变量名

x = 1

number = lst[x] # number从lst[1]获取了值

print(number)

x += 1 # x增加了1

number = lst[x] # 添加这行代码以改变number,现在它是lst[2]

print(number)
print(x)

#输出
1
2
2

英文:
  1. lst = [0, 1, 2, 3, 4] # do not use list as a variable name
  2. x = 1
  3. number = lst[x] # number got the value 1 from lst[1]
  4. print(number)
  5. x += 1 # x is incremented by 1
  6. number = lst[x] # add this line to change number, now it is lst[2]
  7. print(number)
  8. print(x)
  9. #output
  10. 1
  11. 2
  12. 2

答案3

得分: 1

以下是翻译的内容:

正如其他人指出的,重新分配 x 不会自动重新分配 number

一般来说,拥有需要同时重新分配的两个变量是迷惑自己的简单方法 - 如果您在更新一个后忘记更新另一个,您很可能在程序中出现错误,然后需要四处寻找以确定这两者何时分离。

通常更好的方法是拥有一个单一的值(单一的“真实来源”),然后使用一个可以自动计算相关值的函数。在面向对象编程上下文中,您通常会通过定义一个 @property 来实现这一点,但您也可以使用一个普通的函数来做到这一点:

  1. numbers = [0, 1, 2, 3, 4]
  2. x = 1
  3. def number():
  4. return numbers[x]
  5. print(number())
  6. x += 1
  7. print(number())
  8. print(x)

打印:

  1. 1
  2. 2
  3. 2

请注意,由于 number 是一个函数,您需要调用它(即 number())以获取所需的值。调用函数会导致重新评估 numbers[x],从而为您提供了更新后的 number 值。

英文:

As others have pointed out, reassigning x will not automatically reassign number.

In general, having two variables that need to be reassigned at the same time is an easy way to confuse yourself -- if you ever forget to update one after updating the other, you're likely to have a bug in your program, and then you need to hunt all over the place to figure out at what point the two drifted apart.

A better approach is usually to have a single value (a single "source of truth") and then use a function that will automatically calculate the associated value from it. In an OOP context you'd frequently do this by defining a @property, but you can also do it with a plain old function:

  1. numbers = [0, 1, 2, 3, 4]
  2. x = 1
  3. def number():
  4. return numbers[x]
  5. print(number())
  6. x += 1
  7. print(number())
  8. print(x)

prints:

  1. 1
  2. 2
  3. 2

Note that since number is a function, you need to call it (i.e. number()) to get the desired value. Calling the function is what causes numbers[x] to be re-evaluated, giving you the updated value for number.

答案4

得分: 0

更改 x 在分配 number 后不会改变 number。 为了得到预期的结果,您需要在 x 更改后重新分配 number

  1. list_num = [0, 1, 2, 3, 4]
  2. x = 1
  3. number = list_num[x]
  4. print(number)
  5. x += 1
  6. number = list_num[x]
  7. print(number)
  8. print(x)

编辑:您不应该将 list 用作变量名。

英文:

Changing x after assigning number won't change number. For the intended result, you would have to reassign number after the x change:

  1. list_num = [0, 1, 2, 3, 4]
  2. x = 1
  3. number = list_num[x]
  4. print(number)
  5. x += 1
  6. number = list_num[x]
  7. print(number)
  8. print(x)

EDIT: you should not use list as a variable name

答案5

得分: 0

这是代码:

  1. lst = [0, 1, 2, 3, 4]
  2. x = 1
  3. number = lst[x] # 将索引为1的值(1)分配给number
  4. print(number) # 输出:1
  5. x += 1 # 将x的值增加1
  6. number = lst[x] # 使用更新后的索引2(2)重新分配number
  7. print(number) # 输出:2
  8. print(x) # 输出:2(x已增加)

希望这对你有所帮助。

英文:

here is the code:

  1. lst = [0, 1, 2, 3, 4]
  2. x = 1
  3. number = lst[x] # Assign the value at index 1 (1) to number
  4. print(number) # Output: 1
  5. x += 1 # Increment the value of x by 1
  6. number = lst[x] # Reassign number with the updated value at index 2 (2)
  7. print(number) # Output: 2
  8. print(x) # Output: 2 (x has been incremented)

huangapple
  • 本文由 发表于 2023年5月21日 22:24:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/76300380.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定