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

如何在python中修改实际变量列表,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我想对对象列表做同样的事情。我可以对所有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]: pr

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

在这里,您甚至不需要使用列表理解。在您的特殊情况下,这就足够了:

 x = y = z = 5

在这里,您甚至不需要使用列表理解。在您的特殊情况下,这就足够了:

 x = y = z = 5

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

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

>>> 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']
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
编辑以下内容以回应您对问题的评论:


是的,我昨天用了一些。但我并不想要一个列表,我希望它们以相同的名字留在记忆中

在这种情况下,使用字典作为数据结构,而不是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}

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

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

>>> 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']
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
编辑以下内容以回应您对问题的评论:


是的,我昨天用了一些。但我并不想要一个列表,我希望它们以相同的名字留在记忆中

在这种情况下,使用字典作为数据结构,而不是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}
那怎么办

 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
那怎么办

 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

如果希望变量以相同的名称保留在内存中,但使用不同的值,可以执行以下操作:

[x, y, z] = [5 for _ in items]


如果希望变量以相同的名称保留在内存中,但使用不同的值,可以执行以下操作:

[x, y, z] = [5 for _ in items]

如何对变量列表进行操作

一般来说,你没有。如果您有要作为列表操作的值,则将它们存储在列表中,而不是单个变量中。或者您可以将它们存储为字典中的项目或对象的属性,只是不要将它们放在单独的变量中

对于您询问的特定案例,您可以这样做:

x, y, z = map(double, [x, y, z])
或者你的另一个例子:

>>> items = [1,2,3]
>>> [x*10 for x in items]
[10, 20, 30]
>>> map(str, items)
['1', '2', '3']
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
如何对变量列表进行操作

一般来说,你没有。如果您有要作为列表操作的值,则将它们存储在列表中,而不是单个变量中。或者您可以将它们存储为字典中的项目或对象的属性,只是不要将它们放在单独的变量中

对于您询问的特定案例,您可以这样做:

x, y, z = map(double, [x, y, z])
或者你的另一个例子:

>>> items = [1,2,3]
>>> [x*10 for x in items]
[10, 20, 30]
>>> map(str, items)
['1', '2', '3']
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


你的问题是什么?你读过列表理解吗?是的,我昨天用了一些。实际上我并不想要一个列表,我希望它们以相同的名称留在内存中。在本例中,它们都是相同的对象,因为您使用的是简单的整数。Python将只为特定的小整数值生成一个对象,并根据需要为其指定多个名称。例如,如果你想这样做,
x+=2
,它会将
x
分配给
7
对象,并像你所期望的那样,将
y
z
单独留下。这样看可能会有所帮助:Python中没有变量,只有名称和对象。你的问题是什么?你读过关于列表理解的内容吗,我昨天用了一些。实际上我并不想要一个列表,我希望它们以相同的名称留在内存中。在本例中,它们都是相同的对象,因为您使用的是简单的整数。Python将只为特定的小整数值生成一个对象,并根据需要为其指定多个名称。例如,如果您要执行
x+=2
,它会将
x
分配给
7
对象,并像您预期的那样,将
y
z
单独保留。这样看可能会有所帮助:Python中没有变量,只有名称和对象。是的,这似乎理解了我的问题和最佳答案。我可以开始一个空的dict,为每个4更新一个新条目,以便您可以阅读,然后理解当然在Python3中,您将需要
列出映射结果。甚至更好,因为目标是返回
dict
。我可能会开始依赖这些dict comp来完成一切:)是的,这似乎理解了我的问题和最好的答案。我可以开始一个空的dict,每4个都更新一个新条目,这样你就可以阅读它,然后理解当然在Python3中你需要
列表
映射结果。甚至更好,因为目标是返回
dict
。我可能会开始依赖那些dict comps来完成一切:)我只是在看到它有多模糊后澄清了我的问题我只是在看到它有多模糊后澄清了我的问题我的4项都不同,我过于简化了,我明白了,你可以像tuple一样解包列表。是的,看起来很干净,我的4项都不同,我把它简化了,我明白了,你可以像元组一样解压列表。是的,看起来很干净地图很好,让它们保持原样地图很好,让它们保持原样