2016-02-28 35 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.您可能想澄清一點點。 :)