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

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

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)

4 ответов


можно использовать 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'))

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

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

редактировать удалены 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]

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

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