【问题标题】:Is there a way to replace variables in for loops?有没有办法替换 for 循环中的变量?
【发布时间】:2021-04-24 11:22:46
【问题描述】:

我正在尝试创建这样的 for 循环:

list = [a, b, c, a_1, b_1, c_1]
for i  in list:
    if str(i).endswith(".0"):
        i = int(i)
print(type(a))

这个输出:

<class 'float'>

这意味着 for 循环没有将条目定义为整数。 我检查了这是否有效以确保它是 for 循环:

if str(i).endswith(".0"):
    i = int(i)

有谁知道为什么 for 循环不会将变量定义为与循环外部相同的变量? 任何帮助将不胜感激。

【问题讨论】:

标签: python python-3.x list for-loop


【解决方案1】:

a 未被编辑的原因是,i 首先被赋予与a 相同的值,然后i 被赋予不同的值而不修改a。 Python 无法获取对变量的引用以便对其进行编辑。一种解决方法是使用间接:创建一个具有属性的对象来存储值,然后i 将指向与a 相同的对象,并且修改对象的属性会同时修改a.valuei.value

from dataclasses import dataclass
from typing import Any

@dataclass
class Box:
    value : Any

# note that the values are constructed like `Box(0.2)`
a, b, c, a_1, b_1, c_1 = (Box(i/10) for i in range(6))


list = [a, b, c, a_1, b_1, c_1]
for i  in list:
    if str(i.value).endswith(".0"):
        i.value = int(i.value)
print(type(a.value))

【讨论】:

    【解决方案2】:

    您不能为浮动对象赋值。您正在尝试做的是:

    # something like
    # assume  i = 5.0
    # if str(i).endswith('.0'):
    #    i = int(i)
    # if str(5.0).endswith('.0'):
    #      5.0 = 5 
    
    # what you want
    
    list_ = [a, b, c, a_1, b_1, c_1]
    for index, value  in enumerate(list_):
        if str(value).endswith(".0"):
            list_[index] = int(value)
    
    a, *rest = list_
    print(type(a))
    
    

    注意:list 是 python 关键字。避免覆盖它。

    演示

    list_ = [1.0, 2, 1, 5.0]
    for index, value  in enumerate(list_):
        if str(value).endswith(".0"):
            list_[index] = int(value)
    
    a, *rest = list_
    print(type(a))
    # class 'int'>
    

    【讨论】:

    • 谢谢!我确实有一个问题。代码的a, *rest = list_ 部分是什么?
    • 啊,我想把list_的第一个值赋值给a,然后把剩下的传给rest变量。结果a=1, rest = [2, 1, 5]
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多