为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2022-07-12 18:03:51
我有以下字典和代码,如果值的头部和尾部相同,我想连接字典的值:    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...简单来说,如何动态创建变量>任何帮助,将不胜感激。
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

:=您可以使用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.


查看完整回答
反对 回复 2022-07-12
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

我认为使用递归是解决这个问题的好方法。


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 ""

按如下方式使用此函数:(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)'


查看完整回答
反对 回复 2022-07-12
?
手掌心

TA贡献1942条经验 获得超3个赞

到目前为止,我还没有理解您的问题,我推断您想要一种自动化的方式来动态创建变量,即拥有c<n>变量而无需自己输入。


你有两种方法:


Using exec: exec用于从代码本身执行 Python 代码。所以你可以尝试这样的事情:

inp = int(input('How many? ))

for i in range(inp):

    val = 20 # Enter the value here

    exec(f"c{i}=val")

但这不推荐


使用字典:字典是为此而生的,在这里很完美

inp = int(input("How many? "))

vals = {}

for i in range(inp):

    val = 10 # Value

    vals[f"c{i}"] = val # or simply vals[i]


查看完整回答
反对 回复 2022-07-12
  • 3 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信