如何在 Python 中动态创建变量?

我有以下字典和代码,如果值的头部和尾部相同,我想连接字典的值:


    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)

我得到这样的结果: (1, 2, 4, 3) (3, 5, 9, 1) (1, 2, 4, 3) (3, 2, 5, 2) (2, 4, 2, 3) 字典将元组的第一个元素作为键,对于给定的c1,我使用c1作为键的最后一个元素从 中获取随机元组dic,通过这种方式,我得到c2, c3, c4, c5。我的问题是:我想编写一个具有整数输入的函数,可以是 10 或 20,所以我可以迭代地得到c10,c20而不是像现在我必须编写c1, c2, c3, c4, c5, c6...


简单来说,如何动态创建变量>


任何帮助,将不胜感激。


qq_花开花谢_0
浏览 209回答 3
3回答

蝴蝶不菲

:=您可以使用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)]最初的选择y并不重要,只要str(y[-1])是dic.

qq_遁去的一_1

我认为使用递归是解决这个问题的好方法。import randomdef 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 ""按如下方式使用此函数:(i 是您希望最后拥有的元组数)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)'

手掌心

到目前为止,我还没有理解您的问题,我推断您想要一种自动化的方式来动态创建变量,即拥有c<n>变量而无需自己输入。你有两种方法:Using exec: exec用于从代码本身执行 Python 代码。所以你可以尝试这样的事情:inp = int(input('How many? ))for i in range(inp):&nbsp; &nbsp; val = 20 # Enter the value here&nbsp; &nbsp; exec(f"c{i}=val")但这不推荐使用字典:字典是为此而生的,在这里很完美inp = int(input("How many? "))vals = {}for i in range(inp):&nbsp; &nbsp; val = 10 # Value&nbsp; &nbsp; vals[f"c{i}"] = val # or simply vals[i]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python