J'ai le dictionnaire et le code suivants, je veux concaténer les valeurs du dictionnaire, si la tête et la queue des valeurs sont les mêmes:
import random
dic={'1':[(1,2,4,3),(1,2,3,1)],'2':[(2,4,2,3),(2,6,5,3)],'3':[(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
c1= (1,2,4,3)
c2=random.choice(dic[str(c1[-1])])
c3=random.choice(dic[str(c2[-1])])
c4=random.choice(dic[str(c3[-1])])
c5=random.choice(dic[str(c4[-1])])
print(c1,c2,c3,c4,c5)
J'obtiens un résultat comme celui-ci :
(1, 2, 4, 3) (3, 5, 9, 1) (1, 2, 4, 3) (3, 2, 5, 2) (2, 4, 2, 3) code>
Le dictionnaire a le premier élément du tuple comme clé, pour le .... c1 donné, j'utilise le dernier élément de c1 comme clé pour obtenir un tuple aléatoire de dic , de cette manière, j'obtiens c2 , c3 , c4 , c5 .
Ma question est la suivante: je veux écrire une fonction avec une entrée intégrale, qui pourrait être 10 ou 20, afin que je puisse obtenir c10 , c20 de manière itérative, pas comme maintenant je dois écrivez chaque étape de c1 , c2 , c3 , c4 , c5 , c6
Simplement, comment créer des variables dynamiquement>
Toute aide serait appréciée.
3 Réponses :
Loin de comprendre votre question, j'en déduis que vous voulez un moyen automatisé de créer des variables à la volée, c'est-à-dire avoir des variables c sans les saisir vous-même.
Vous avez deux méthodes:
exec :
exec est utilisé pour exécuter du code Python à partir du code lui-même. Vous pouvez donc essayer quelque chose comme ceci: inp = int(input("How many? "))
vals = {}
for i in range(inp):
val = 10 # Value
vals[f"c{i}"] = val # or simply vals[i]
Mais ce n'est pas recommandé
inp = int(input('How many? ))
for i in range(inp):
val = 20 # Enter the value here
exec(f"c{i}=val")
val = 10 est une constante, mais pour chaque c0, c1, c2, ... j'ai besoin qu'ils soient différents, et c1 est calculé en fonction de c0, c2 est calculé en fonction de c1, c3 est calculé en fonction de c2, .. .usw
vals = {} for i in range (inp): if i == 0: vals [f "c {0}"] = (1,2,4,3) #i> 0 else: vals [f "c { i} "] = choix aléatoire (dic [str (vals [f" c {i-1} "] [- 1])])
Je pense que l'utilisation de la récursivité est une bonne approche pour résoudre ce problème.
dic = {'1': [(1,2,4,3),(1,2,3,1)],
'2': [(2,4,2,3),(2,6,5,3)],
'3': [(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
concatenator(dic, 5)
# outputs: '(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)'
En utilisant cette fonction comme suit: (i est le nombre de tuples que vous voulez avoir à la fin) p >
import random
def concatenator(dictionary, i, key=1):
if i > 0:
tuple_chosen = random.choice(dictionary[str(key)])
next_key = tuple_chosen[-1]
return str(tuple_chosen) + concatenator(dictionary, i-1, key=next_key)
else:
return ""
très agréable et chic 👍👍👍👍
Vous pouvez le faire avec une compréhension de liste en utilisant l'opérateur d'expression d'affectation : = dans Python 3.8.
>>> import random
>>> dic={'1':[(1,2,4,3),(1,2,3,1)],'2':[(2,4,2,3),(2,6,5,3)],'3':[(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
>>> y = (1,2,4,3)
>>> n = 20
>>> [(y:=random.choice(dic[str(y[-1])])) for _ in range(n)]
[(3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 5, 9, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3)]
Le choix initial de y code> n'a pas vraiment d'importance, tant que str (y [-1]) est une clé dans dic.
Votre question et votre description ne correspondent pas ... Vous souhaitez une concaténation ou une création de variables dynamiques?
Vérifiez ceci aussi; stackoverflow .com / questions / 1373164 /…
Est-ce que cela répond à votre question? Comment créer un nombre variable de variables?
Vous avez juste besoin de la concaténation? Je veux dire, pour ce que je vois, vous n'avez pas besoin d'avoir réellement c1, c2 ... cn mais autre chose que d'imprimer la concaténation finale.
oui, j'ai juste besoin de la concaténation, mais la longueur de la concaténation doit être variable, pas seulement 5 comme dans l'exemple
Très bien, je comprends. Laissez-moi élaborer la réponse avec une solution possible
Je pense que vous devriez mettre à jour le nom de la question, en passant. "Comment créer des variables à la volée en Python?" ne représente pas ce que vous vouliez réaliser.
merci pour le nouveau nom