Python传递函数参数作为列表标识符

Python传递函数参数作为列表标识符,python,list,function,substitution,Python,List,Function,Substitution,我创建了一个函数,它可以接受一个参数,该参数定义了另一个调用来操作列表。例如,如果我直接调用sliprotor(Rotorid1,1),那么Rotorid1列表将根据我的需要进行操作。功能如下: def sliprotor(rotorid,offset_qty): for movers in range(26,0,-1): rotorid[movers-1+offset_qty]=rotorid[movers-1]

我创建了一个函数,它可以接受一个参数,该参数定义了另一个调用来操作列表。例如,如果我直接调用sliprotor(Rotorid1,1),那么Rotorid1列表将根据我的需要进行操作。功能如下:

def sliprotor(rotorid,offset_qty):                          
    for movers in range(26,0,-1):
         rotorid[movers-1+offset_qty]=rotorid[movers-1]     
    for movers_refill in range(offset_qty):
         rotorid[movers_refill]=rotorid[movers_refill+26]   
但是,如果我试图通过构建列表名并执行它来“间接”调用它,“rotorid”不会像直接调用时那样转换为值

我这样做的方式是

def set_curr_rotor(XX): 
    rotorid = "Rotorid"+str(XX)             
    return rotorid  

rid1 = input("First rotor slip : ")         
if(rid1): 
    sliprotor(set_curr_rotor(rid1),1)
因此,“间接”调用不会将set\u curr\u rotor函数创建的值传递给sliprotor函数。直接调用使用传入的值

如果我查看debug,您可以看到它直接调用rotorid[]作为列表,而不是Rotorid1或其他Rotoridx,因此我得到了一个索引错误

。。。。 文件“”,第3行,在sliprotor中 rotorid[movers-1+偏移量]=rotorid[movers-1] 索引器错误:字符串索引超出范围

我可以按照我拥有代码的方式进行重组,但我不希望这样。我是否缺少一些方法/范围问题?这只是Python的固有属性吗?我对Python非常陌生,所以我只是在做一个模拟Enigma机器的练习

谢谢你的帮助。
Ed

我假设您已经定义了转子,类似这样:

Rotorid1 = list('abcdefghijklmnopqrstuvwxyz')
Rotorid2 = list('abcdefghijklmnopqrstuvwxyz')
Rotors = [ Rotorid1, Rotorid2, ... ]
现在你不愿意改变这个,因为。。。原因

那很好。但你还是错了。您需要做的是创建一个更大的数据结构。您可以这样做:

Rotorid1 = list('abcdefghijklmnopqrstuvwxyz')
Rotorid2 = list('abcdefghijklmnopqrstuvwxyz')
Rotors = [ Rotorid1, Rotorid2, ... ]
现在您有了一个列表列表。
Rotors
变量现在包含所有不同的
Rotorid
变量。(好吧,它引用了它们。但那就行了。)

无需将变量名作为句柄传递给rotor,只需传递一个索引号:

def set_rotor(id):
    global Current_rotor
    Current_rotor = id

def slip_rotor(amount):
    global Current_rotor
    global Rotors

    rotor = Rotors[Current_rotor]

    for movers in range(26,0,-1):
        rotor[movers-1+offset_qty]=rotor[movers-1]      
    # etc...

另外,请确保在Python中查找—通过使用切片操作子列表和子字符串,您可以做很多事情。

可能重复的“不要这样做”。这是拙劣的设计。改用容器。基本上,不要把字符串对象和变量名混在一起。你可以使用各种巫术来做这件事,但同样,这是非常非常糟糕的做法。把你的清单放在字典里。然后您可以将结构键作为字符串来访问字典中的列表。我将介绍如何使用列表字典。谢谢如果他在字典索引(或列表)方面有问题,我认为检查列表中是否存在元素(或dict中是否存在键)会很有用。谢谢你的回复。实际上,我的转子是一系列的列表,但我并不反对改变它们。我会这么做的。这真的只是一个问题,以确认我所尝试的内容不受支持,也不受支持,因此我将研究替代方案。好的,我认为我关于在python列表中可以做什么或不能做什么的基本假设是错误的。您似乎无法检索一个列表中的名称作为另一个列表的引用。i、 e.如果我有top_list=[l1,l2,l3]和l1=[[i11,i12,i13],[i21,i22,i23],[i31,i32,i33],[m11,m12,m13],[m21,m22,m23],[m31,m32,m33],[o11,o12,o13],[o21,o22,o23],[o31,o32,o33],[o21],我引用top_list[0],我不能使用它作为l1的引用,它允许我访问列表。如果您正在存储引用,可以。您不想存储文字字符串。我将创建一个3层的列表。