Skip to main content
 首页 » 编程设计

python之如何修改python中的实际变量列表

2025年05月04日8傻小

我想对对象列表做同样的事情。我可以在所有 3 个上调用一个函数,例如:

x = double(x) 
y = double(y) 
z = double(z) 

但即使按照前现代标准,这看起来也很可怕。我愿意

In [4]: z = 0 
 
In [5]: x = 0 
 
In [6]: y = 0 
 
In [7]: items = [x, y, z] 
 
In [8]: for item in items: 
   ...:     item = 5 
   ...:      
 
In [9]: print(x) 
 
0 

没有骰子。你如何对变量列表进行操作,我正在阅读 getattr,它似乎对我不起作用

在这种情况下,我想遍历 x、y 和 z,并在两行代码中将它们都设置为 5-for item in items,然后修改每个项目

现在,我的行为很奇怪,就像所有项目都直接相等一样:

In [11]: for item in items: 
    print item is x 
   ....:      
True 
True 
True 
 
 
In [12]: for item in items: 
    print item is y 
   ....:      
True 
True 
True 

我实际上并不想要一个列表,我希望它们以相同的名称保留在内存中,这样我就可以立即执行:

return {'income': income, 'ex_date': exdate, ...} 

我没有提供足够的信息,但这是目标,所有 4 个都必须单独处理:

    total_income = self.get_total_income(portfolio_id) 
    short_term = get_short_term(distros, 'ST') 
    long_term = get_lt(distros, 'LT') 
    total_distributions = self.get_totals(portfolio_id) 
    items = [total_income, short_term, long_term, total_distributions] 
    for item in items: 
        do the same thing 
    return {'total_income': total_income, 'short_term': short_term, 'long_term': long_term, 'total_distributions': total_distributions} 

请您参考如下方法:

您的循环的问题在于您所做的只是将 5 分配给名称 item,而从未对原始列表执行任何操作。

要修改列表(或者更准确地说,获取修改值的新列表),您可以使用列表理解或映射一个函数到列表的所有元素。

>>> items = [0, 0, 0] 
>>> [float(x) for x in items] 
[0.0, 0.0, 0.0] 
>>> map(float, items) 
[0.0, 0.0, 0.0] 

另一个例子:

>>> items = [1,2,3] 
>>> [x*10 for x in items] 
[10, 20, 30] 
>>> map(str, items) 
['1', '2', '3'] 

编辑以回应您对问题的评论:

ya, I used a few yesterday. I don't actually want a list though, I want them to stay in memory with the same name

在那种情况下,使用字典作为数据结构而不是 n 个独立变量。示例:

>>> my_values = {'x': 1, 'y': 2, 'z':3} 
>>> my_values['y'] 
2 

您可以通过给定规则和字典理解来修改您的所有值。

>>> my_values = {key:value*2 for key, value in my_values.items()} 
>>> my_values 
{'y': 4, 'x': 2, 'z': 6}