我想对对象列表做同样的事情。我可以在所有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 - 对于项目中的项目,然后修改每个项目
现在,我得到奇怪的行为,就像所有项目彼此直接相等:
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}
答案 0 :(得分:4)
你的循环的问题在于你所做的只是为名称item
分配5,但从不对原始列表做任何事情。
要修改列表(或者更确切地说,获取修改后的值的新列表),您可以使用列表推导或map
函数对列表的所有元素进行操作。
>>> 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']
编辑以回应您对该问题的评论:
是的,我昨天用过一些。我实际上并不想要一个列表,我希望它们留在内存中使用相同的名称
在这种情况下,使用字典作为数据结构而不是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}
答案 1 :(得分:2)
在这里,您甚至不需要使用列表推导。在您的特定情况下,这就足够了:
x = y = z = 5
答案 2 :(得分:2)
如果您希望变量保留在具有相同名称但具有不同值的内存中,您可以执行以下操作:
[x, y, z] = [5 for _ in items]
或
[x, y, z] = [double(i) for i in items]
答案 3 :(得分:1)
怎么样?
x = 1
y = 2
z = 3
l = [x, y, z]
l = [i**2 for i in l]
x, y, z = l
print(x, y, z)
1 4 9
答案 4 :(得分:1)
如何操作变量列表
一般来说,你没有。如果您要将值作为列表进行操作,则将它们存储在不在单个变量中的列表中。或者您可以将它们存储为字典中的项目或对象的属性,只是不要将它们放在单独的变量中。
对于您询问的具体案例,您可以这样做:
x, y, z = map(double, [x, y, z])
或您的其他示例:
total_income = self.get_total_income(var)
short_term = get_short_term(var)
long_term = get_lt(var)
total_distributions = self.get_totals(var)
items = [total_income, short_term, long_term, total_distributions]
result = {
'total_income': total_income,
'short_term': short_term,
'long_term': long_term,
'total_distributions': total_distributions
}
# N.B. Using list(...) to avoid modifying the dict while iterating.
for key, value in list(result.items()):
result[key] = do_something(value)
return result