是否可以在python中的另一个列表中包含列表的名称?

时间:2014-02-16 17:05:28

标签: 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, 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()

2 个答案:

答案 0 :(得分:1)

首先,您要在calc_fare中声明一堆您根本不使用的局部变量;让我们从删除它们开始:

def calc_fare(colour, distance, zonestart, zoneend):
    if zonestart in zoneend:
        return colour[2]
    else:
        return "test if statement failed"

distance参数也未被使用:

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]

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

如果您想将l1“展开”到l2,则需要:

l2 = l1 + [1, 2, 3]

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

或诸如此类的。

至于引用已定义的变量

'foo'以及"foo"创建一个包含文字“foo”的字符串; foo指的是名称为“foo”的变量。如果您不明白这一点,我强烈建议您为绝对的初学者提供一本关于Python(或任何其他语言)的书。

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

将准确地给出:包含4个项目的列表:字符串“l1”后跟整数4,5,6 ..

答案 1 :(得分:-1)

您可以使用locals()完成您想要的任务,但这不是一个好习惯。我建议将实际链接存储到对象而不仅仅是它们被称为。

编辑:作为一个例子

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