Подтвердить что ты не робот

Добавить несколько переменных в список в Python

Я хочу добавить несколько переменных в список. Число переменных меняется. Все переменные начинаются с "volume". Я думал, может быть, подстановочный знак, или что-то сделало бы это. Но я не мог найти ничего подобного. Есть идеи, как это решить? Обратите внимание, что в этом примере это три переменные, но также может быть пять или шесть или что-то еще.

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)
4b9b3361

Ответ 1

Вы можете использовать extend для добавления любого итерабельного в список:

vol.extend((volumeA, volumeB, volumeC))

В зависимости от префикса имен переменных у меня плохой запах кода, но вы можете это сделать. (Порядок добавления значений undefined.)

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

Ответ 2

Хотя вы можете сделать

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

Ответ 3

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]

Ответ 4

Вы хотите добавить имена переменных, а также их значения?

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