2013-06-23 31 views
4

這個問題是在python:列表索引如何工作?

battleships = [['0','p','0','s'], 
       ['0','p','0','s'], 
       ['p','p','0','s'], 
       ['0','0','0','0']] 
def fun(a,b,bships): 
    c = len(bships) 
    return bships[c-b][a-1] 

print(fun(1,1,battleships)) 
print(fun(1,2,battleships)) 

第一打印給0 第二打印給p

我不能工作了,爲什麼,如果你能給它會非常感激的解釋。

謝謝那些誰幫助:)

+0

什麼是你期待的,爲什麼? –

回答

3

索引開始於0。所以戰列艦包含索引0,1,2,3的項目。

首先len(bships)獲取列表battleships的列表,這是4

bships[c-b][a-1]訪問在通過其指標值列表中的項目的長度。所以,你的第一次調用函數:

print(fun(1,1,battleships)) 

這是bships[4-1][1-1]這是bships[3][0]這是['0','0','0','0'][0]這是0

+0

非常感謝! – Emma

+0

@Emma不客氣! 20分鐘後不要忘記接受答案(或者只要有可能) – TerryA

+0

爲什麼這會降低評分? – TerryA

3

您可以通過與實際值替換的計算工作,它很容易:

在第一個電話中,您正在建立索引:

bships[c-b][a-1] == bships[4-1][1-1] == bships[3][0] 

Cou從0開始nting,這是最後一行,['0','0','0','0'],第一個元素,'0'

第二次調用的計算結果爲:

bships[c-b][a-1] == bships[4-2][1-1] == bships[2][0] 

第二最後一排的那麼首先細胞,['p','p','0','s']'p'

請注意,在Python中,您可以使用負指數而不首先計算len();刪除你的函數c,它會所有的工作一樣的:

>>> battleships = [['0','p','0','s'], 
...    ['0','p','0','s'], 
...    ['p','p','0','s'], 
...    ['0','0','0','0']] 
>>> def fun(a,b,bships): 
...  return bships[-b][a-1] 
... 
>>> print(fun(1,1,battleships)) 
0 
>>> print(fun(1,2,battleships)) 
p 

這是因爲Python的把負指數從結尾開始計算;在內部它將使用序列長度(與序列一起存儲)來計算同樣的事情,但速度更快。

+0

謝謝martijn! – Emma

+0

從提到不需要len(戰列艦)+1 +1 –

1
>>> battleships = [['0','p','0','s'], 
...    ['0','p','0','s'], 
...    ['p','p','0','s'], 
...    ['0','0','0','0']] 
>>> 
>>> a = 1 
>>> b = 1 
>>> c = len(battleships) 
>>> c-b,a-1  
(3, 0) 

現在battleships[c-b][a-1]可以分爲兩個部分:

battleships[c-b][a-1]

的Python首先調用battleships[c-b]c-b3所以它返回從戰艦最後的名單(第4項)。一世。Ë['0','0','0','0'](索引開始於0

下面是第二部分:[a-1]

現在[a-1]叫上返回的列表,即['0','0','0','0']

['0','0','0','0'][a-1]作爲a-10所以Python從返回的第一個項目這個清單。

,所以你得到了 '0'。

同樣申請了ab不同的值,:

>>> a = 1 
>>> b = 2 
>>> c-b,a-1 
(2, 0) 
>>> battleships[c-b] 
['p', 'p', '0', 's'] 
>>> battleships[c-b][a-1] #calls ['p', 'p', '0', 's'][0] 
'p' 
+0

謝謝ashwini :) – Emma

1

當你們瞭解編程任何新的東西改變程序有點問題。

我給你舉個例子。我改變了一下。

battleships = [['0','p','0','s','3'], 
       ['0','p','0','s','8'], 
       ['p','p','0','s','2']] 

print "len(battleships) =",len(battleships) 
print "battleships[0] =",battleships[0] 
print "battleships[1] =",battleships[1] 
print "battleships[2] =",battleships[2] 
print "len(battleships[0]) =", len(battleships[0]) 

當我運行它的輸出是

len(battleships) = 3 
battleships[0] = ['0', 'p', '0', 's', '3'] 
battleships[1] = ['0', 'p', '0', 's', '8'] 
battleships[2] = ['p', 'p', '0', 's', '2'] 
len(battleships[0]) = 5 

與之相匹配的打印語句的輸出語句。這將有所幫助。

嘗試print battleships[0][1]


一個建議。搜索Google for Python並將其安裝到您的計算機上。如果我是正確的,這是來自codecademy。僅使用codecademy是不夠的。您將需要編寫Python腳本,運行它們並查看它們的輸出。只有在此之後,你才能夠學習。試試this出來。在編程教學時,他們比編碼學要好。

+0

感謝您的提示,我很感激。 – Emma