在python中,是否可以将一个列表的名称放在另一个列表中?

在python中,是否可以将一个列表的名称放在另一个列表中?,python,list,if-statement,statements,Python,List,If Statement,Statements,所以基本上我不确定为什么我的if语句不起作用,我想可能是因为我的列表中有列表名,但我不确定。感谢您的帮助 def calc_fare(colour, distance, zonestart, zoneend): farelist = [colour, distance, zonestart, zoneend] red = [2.00, 2.50, 4.50, 6.50] silver = [1.80, 2,30, 4.10, 5.80] blue = [0.90,

所以基本上我不确定为什么我的if语句不起作用,我想可能是因为我的列表中有列表名,但我不确定。感谢您的帮助

def calc_fare(colour, distance, zonestart, zoneend):
    farelist = [colour, distance, zonestart, zoneend]
    red = [2.00, 2.50, 4.50, 6.50]
    silver = [1.80, 2,30, 4.10, 5.80]
    blue = [0.90, 1.15, 2.05, 2.90]
    gold = [3.60, 4.60, 8.20, 11.60]
    z1 = ['z2', 'z3', 'z7']
    z2 = ['z1', 'z3', 'z6']
    z3 = ['z1', 'z2', 'z4', 'z6', 'z7']
    z4 = ['z3', 'z5', 'z6', 'z7']
    z5 = ['z4', 'z6']
    z6 = ['z2', 'z3', 'z4', 'z5']
    z7 = ['z1', 'z3', 'z4']
    if zonestart in zoneend:
        return colour[2]
    else:
        return "test if statement failed"

def main():
    print (calc_fare((str(input('Please enter colour'))), (float(input('Please enter distance'))), (str(input('Please enter starting zone'))), (str(input('Please enter ending zone')))))
    #print(calc_fare("silver", 8.5, "z3", "z6"))

main()

您可以使用
locals()
实现您想要的,但是这不是一个特别好的实践。我建议存储到对象的实际链接,而不仅仅是它们的名称

编辑:例如

>>> z1 = ['z2', 'z3', 'z7']
>>> z2 = ['z1', 'z3', 'z6']
>>> locals()[z1[0]]
['z1', 'z3', 'z6']

首先,您在
calc\u-fare
中声明了一组根本不用的局部变量;让我们从删除这些内容开始:

def calc_fare(colour, distance, zonestart, zoneend):
    if zonestart in zoneend:
        return colour[2]
    else:
        return "test if statement failed"
也不使用
距离
参数:

def calc_fare(colour, zonestart, zoneend):
    if zonestart in zoneend:
        return colour[2]
    else:
        return "test if statement failed"
剩下的只是一个函数,如果第二个参数的值包含在其第三个参数中,则该函数返回其第一个参数所引用的值中的第三项

有了这些信息,你应该试着重新考虑你首先要问的问题

将列表放在其他列表中;如果您有此功能:

l1 = [1, 2, 3]
l2 = [l1, 4, 5, 6]
你最终得到的相当于:

l1 = [1, 2, 3]
l2 = [[1, 2, 3], 4, 5, 6]
不是

如果要将
l1
转换为
l2
,您需要:

l2 = l1 + [1, 2, 3]

或者别的什么

关于已定义变量的引用

“foo”
以及
“foo”
创建一个包含文本“foo”的字符串
foo
指的是一个名为“foo”的变量。如果您不理解这一点,我强烈建议您为初学者准备一本关于Python(或其他任何语言)的书

l1 = [1, 2, 3]
l2 = ['l1', 4, 5, 6]

将为您提供一个包含4项的列表:字符串“l1”后跟整数4、5、6..

您的列表中有字符串;它们看起来可能与名称完全相同,但Python没有实现这种连接。此外,您的列表是递归的,您需要在这方面付出更多的努力;)(虽然Python非常棒,可以支持这一点)没有一个列表是递归的..?使用字典而不是列表;你几乎不需要更改代码。在dict中,
都可以是字符串,因此您可以执行
dict[value]
,并且您实际上正在访问
所指的
键。尽管您的评论很短,但我还是很高兴地说出来,这是最有用的。我按照你说的使用字典,并按照说明完成了作业。非常感谢你。你的回答帮助了你无法想象的事情+10000由于某种原因,我觉得
locals()
不是OP需要的东西…:)(附言,不是我的反对票)不仅是他需要什么,我甚至看不出这对他有什么帮助。我刚刚举了一个例子,说明你将如何利用当地人()来完成海报上的要求。我认为他们不应该使用它,我只是添加了它,因为这是可能的。@PeterMichealLacey Bordeaux:阅读他的评论,这根本不是他想要的:他试图引用函数调用站点中函数内部定义的变量
z2
。。。这就是为什么我的第一个评论:OP绝对没有变量方面的经验,这很可能是他第n次尝试编程(哦,但我不想把一个列表放在另一个列表中,实际上我只想把列表的名称放在另一个列表中?可能吗?你说的“列表名称”是什么意思?包含该列表的变量的名称?现在这只是一个字符串,不是吗?为什么你不能将其放入任何你喜欢的列表中?…以防万一你没有意识到:存储(或者,实际上,指向)的变量的名称一个特定的对象/值在任何给定的时间,都不能被变量所指向的对象/值所知道。同一个列表实例/对象可以被两个或多个变量引用,每个变量都有不同的名称,并且列表本身根本看不到。如果我告诉你一些你已经知道的事情,我深表歉意。好吧,我试一下d此输入(银色,8.5,z2,z6)但是,即使z2在z6列表中,if语句也不起作用。这是为什么?你真的读过我的答案@user1814771吗?或者如果是,你明白我说的话及其含义吗?请看看你代码的简化版本,问问你自己为什么会这样——也就是说,为什么我要删除所有
z1
z2
etc作业。
l2 = [-3, -2, -1] + l1 + [4, 5, 6]
l1 = [1, 2, 3]
l2 = ['l1', 4, 5, 6]