2016-02-28 71 views
3

我有从A到G的七个列表。我在输入n中读取,例如:b1。在列表B中索引1打印项目的最快方法是什么? 我已经尝试过这一点,但它似乎太长:打印列表高级选项

n = input() 
if n[0].upper == 'A': 
    print(A[n[1]]) 
elif n[0].upper == 'B': 
    print(B[n[1]]) 
elif n[0].upper == 'C': 
    print(C[n[1]]) 

and so on .... 

是否有这样做的任何其他方式?而且呀,这不工作:

print(n[0].upper()[n[1]]) 
+0

您阅读的输入是否与相同列表中列表和项目索引的名称相关? –

+0

改为使用字典。那就是'{'A':[...],'B':[...],...}'。这样,你可以说'dictionary_name [n [0]] [n [1]]' – zondo

回答

2

我想说的正确的方法是你的清单整理成字典,然后使用它是这样的:

>>> A = [0, 1, 2] 
>>> B = [3, 4, 5] 
>>> data = {'A':A, 'B':B} 
>>> data['B'][1] 
4 

,或者在你的情况:

>>> data[n[0].upper()][n[1]] 
4 
+2

应该是'int(n [1])' –

1

如果您想最小化要打印的行数,可以将这些列表存储在字典中。看起来你知道列表索引不会超过10人,否则N [1]不会有足够

>>> my_dict = {} 
>>> 
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> 
>>> my_dict['a'] = a 
>>> my_dict['b'] = b 
>>> my_dict['c'] = c 
>>> 
>>> n='a1' 
>>> print my_dict[n[0]][int(n[1])] 

但在此之前,它应该是检查你的责任,如果输入的列表和指数存在。

+0

避免使用像'dict'这样的内置命名命名你的变量。你会影响'dict'构造函数 –

+0

@Iron Fist true,修正它.. –

1

您可以使用python的内置globals()方法。试试这个:

A = [1, 2, 3, 4, 5] 
B = [10, 20, 30, 40, 50] 
C = [100, 200, 300, 400, 500] 
D = [1000, 2000, 3000, 4000, 5000] 

n = input() 
n, i = n[0].upper(), int(n[1]) 

print(globals()[n][i]) 

如果你的变量是函数的局部或任何其他范围,您可以使用globals()小弟这是​​。像这样:

print(locals()[n][i]) 

顺便说一句,你说位置,但使用的是作为指数。肯定项目在位置 1位于索引 0.您可能想澄清一点点。 :)