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

ust*_*etz 14 python list append

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

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)
Run Code Online (Sandbox Code Playgroud)

Jon*_*ric 15

您可以使用extend将任何iterable附加到列表:

vol.extend((volumeA, volumeB, volumeC))
Run Code Online (Sandbox Code Playgroud)

根据您的变量名称的前缀,我有一个糟糕的代码味道,但您可以这样做.(未定义附加值的顺序.)

vol.extend(value for name, value in locals().items() if name.startswith('volume'))
Run Code Online (Sandbox Code Playgroud)

如果订单很重要(恕我直言,仍然有异味):

vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))
Run Code Online (Sandbox Code Playgroud)


geo*_*org 5

虽然你可以做到

vol = []
vol += [val for name, val in globals().items() if name.startswith('volume')]
# replace globals() with locals() if this is in a function
Run Code Online (Sandbox Code Playgroud)

一个更好的方法是使用字典而不是类似命名的变量:

volume = {
    'A': 100,
    'B': 20,
    'C': 10
}

vol = []
vol += volume.values()
Run Code Online (Sandbox Code Playgroud)

请注意,在后一种情况下,项目的顺序是未指定的,即您可以获得[100,10,20]或[10,20,100].要按键的顺序添加项目,请使用:

vol += [volume[key] for key in sorted(volume)]
Run Code Online (Sandbox Code Playgroud)