我想对对象列表做同样的事情。我可以在所有 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}
