我想将几个变量附加到列表中。变量的数量不同。所有变量都以“volume”开头。我在想也许是通配符或其他东西可以做到。但我找不到这样的东西。任何想法如何解决这个问题?请注意,在此示例中它是三个变量,但也可以是五个或六个或任何值。
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)]
EDIT从列表理解中删除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')])
如果我得到适当的问题,您正在尝试将不同变量中的不同值附加到列表中。让我们看看下面的例子。假设 :
email = 'example@gmail.com'
pwd='Mypwd'
list = []
list.append(email)
list.append (pwd)
for row in list:
print(row)
# the output is :
#example@gmail.com
#Mypwd
希望这会有所帮助,谢谢。