Добавить несколько переменных в список в Python
Я хочу добавить несколько переменных в список. Число переменных меняется. Все переменные начинаются с "volume". Я думал, может быть, подстановочный знак, или что-то сделало бы это. Но я не мог найти ничего подобного. Есть идеи, как это решить? Обратите внимание, что в этом примере это три переменные, но также может быть пять или шесть или что-то еще.
volumeA = 100
volumeB = 20
volumeC = 10
vol = []
vol.append(volume*)
Ответы
Ответ 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')])