列表索引如何工作?

时间:2013-06-23 10:52:03

标签: python list indexing

这个问题在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

我无法理解为什么,如果你能给出解释,我将不胜感激。

感谢那些帮助的人:)

4 个答案:

答案 0 :(得分:3)

索引从0开始。所以战舰包含索引0123的项目。

首先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

答案 1 :(得分:3)

您可以通过将计算结果替换为实际值来轻松完成:

在第一个电话中,您正在编制索引:

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

从0开始计数,这是最后一行,['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将负面指数视为从最后开始计算;在内部,它将使用序列的长度(与序列一起存储)来计算相同但更快的序列。

答案 2 :(得分: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'

答案 3 :(得分: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语句匹配。这会有所帮助。

尝试print battleships[0][1]等。


还有一个建议。搜索谷歌的Python并将其安装在您的计算机上。如果我是正确的,这是来自codecademy。仅使用codecademy是不够的。您需要编写Python脚本,运行它们并查看它们的输出。只有在那之后你才能学习。试试this。在教授编程时,他们比代码学更好。