在Python中将多个变量追加到列表中

19 投票
5 回答
117661 浏览
提问于 2025-04-17 15:47

我想把几个变量添加到一个列表里。这些变量的数量是不固定的,都是以“volume”开头的。我在想,可能用个通配符之类的可以解决这个问题。但是我找不到这样的东西。有没有什么好主意可以解决这个问题?在这个例子里是三个变量,但也可能是五个、六个或者其他数量。

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)

5 个回答

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

虽然你可以这样做:

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

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

撰写回答