我想将多个变量追加到列表中。变量的数量各不相同。所有变量都以“音量”开头。我在想也许是通配符或者什么都可以。但我找不到像这样的东西。任何想法如何解决这个问题?注意在这个例子中它是三个变量,但它也可以是五六个或任何其他的。将几个变量追加到Python中的列表中
volumeA = 100
volumeB = 20
volumeC = 10
vol = []
vol.append(volume*)
我想将多个变量追加到列表中。变量的数量各不相同。所有变量都以“音量”开头。我在想也许是通配符或者什么都可以。但我找不到像这样的东西。任何想法如何解决这个问题?注意在这个例子中它是三个变量,但它也可以是五六个或任何其他的。将几个变量追加到Python中的列表中
volumeA = 100
volumeB = 20
volumeC = 10
vol = []
vol.append(volume*)
您可以使用extend
任何可迭代追加到一个列表:
vol.extend((volumeA, volumeB, volumeC))
根据您的变量名的前缀有一个坏的代码味道对我来说,但你可以做到。 (中值附加的顺序是不确定的。)
vol.extend(value for name, value in locals().items() if name.startswith('volume'))
如果顺序很重要(恕我直言,仍然气味错):
vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))
虽然你可以做
vol = []
vol += [val for name, val in globals().items() if name.startswith('volume')]
# replace globals() with locals() if this is in a function
一个更好的方法是使用一个字典,而不是类似命名的变量:
volume = {
'A': 100,
'B': 20,
'C': 10
}
vol = []
vol += volume.values()
注意,在后一种情况下,为了的项目是未指定的,即您可以获得[100,10,20]
或[10,20,100]
。要添加项目中键的顺序,使用方法:
vol += [volume[key] for key in sorted(volume)]
+1;如果你有一堆变量的名字是按某种顺序排列的,那么你几乎肯定是做错了。 – geoffspear 2013-02-13 18:55:04
变量来自其他计算(我没有在这里发布)。如果我使用字典,我有问题先把它们放到字典中。 – ustroetz 2013-02-13 19:00:33
编辑从列表中移除理解为filter
它强调指出,这是一个惊人的想法。
我改变了它,所以它不太相似,所有其他的答案。
volumeA = 100
volumeB = 20
volumeC = 10
lst = map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
print lst
输出
[100, 10, 20]
你要添加的变量名,以及他们的价值?
output=[]
output.append([(k,v) for k,v in globals().items() if k.startswith('volume')])
或只值:
output.append([v for k,v in globals().items() if k.startswith('volume')])
它可以帮助如果你能给这是更接近你的情况的一个实例。也就是说,你是如何得到变量数目不明的变量的? – 2013-02-13 18:43:46