web-dev-qa-db-fra.com

Ajoutez plusieurs variables à une liste dans Python

Je veux ajouter plusieurs variables à une liste. Le nombre de variables varie. Toutes les variables commencent par "volume". Je pensais que peut-être un joker ou quelque chose le ferait. Mais je n'ai rien trouvé de tel. Des idées pour résoudre ceci? Notez que dans cet exemple, il s'agit de trois variables, mais il peut également s'agir de cinq ou six ou n'importe quoi.

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)
13
ustroetz

Vous pouvez utiliser extend pour ajouter tout itérable à une liste:

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

Selon le préfixe de vos noms de variables, j'ai une mauvaise odeur de code, mais vous pouvez le faire. (L'ordre dans lequel les valeurs sont ajoutées n'est pas défini.)

vol.extend(value for name, value in locals().items() if name.startswith('volume'))

Si l'ordre est important (à mon humble avis, ça sent toujours mauvais):

vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))
14
Jon-Eric

Bien que vous puissiez faire

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

une bien meilleure approche serait d'utiliser un dictionnaire au lieu de variables portant le même nom:

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

vol = []
vol += volume.values()

Notez que dans ce dernier cas, l'ordre des articles n'est pas spécifié, c'est-à-dire que vous pouvez obtenir [100,10,20] ou [10,20,100]. Pour ajouter des éléments dans un ordre de clés, utilisez:

vol += [volume[key] for key in sorted(volume)]
5
georg

MODIFIER a supprimé filter de la compréhension de la liste car il a été souligné que c'était une idée épouvantable.

Je l'ai changé donc ce n'est pas trop similaire à toutes les autres réponses.

volumeA = 100
volumeB = 20
volumeC = 10

lst =  map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
print lst

Production

[100, 10, 20]
3
sotapme

voulez-vous ajouter les noms des variables ainsi que leurs valeurs?

output=[]

output.append([(k,v) for k,v in globals().items() if k.startswith('volume')])

ou juste les valeurs:

output.append([v for k,v in globals().items() if k.startswith('volume')])
0
user2040608