在Python中将几个变量附加到列表中

时间:2013-02-13 18:28:16

标签: python list append

我想在列表中附加几个变量。变量的数量各不相同。所有变量都以“volume”开头。我在想也许是一个通配符或其他东西会这样做。但我找不到这样的东西。任何想法如何解决这个问题?请注意,在此示例中,它是三个变量,但也可能是五个或六个或任何变量。

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)

5 个答案:

答案 0 :(得分:14)

您可以使用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'))

答案 1 :(得分:5)

虽然你可以做到

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)]

答案 2 :(得分:3)

编辑从列表理解中删除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]

答案 3 :(得分:1)

如果我得到了正确的问题,您正在尝试将不同变量中的不同值附加到列表中。让我们看看下面的例子。 假设:

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

希望对您有所帮助,谢谢。

答案 4 :(得分:0)

您要添加变量的名称及其值吗?

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')])