列表索引是如何工作的?

2024-09-25 00:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我不明白为什么,如果你能解释一下,我将不胜感激。在

感谢帮助的人:)


Tags: lenreturndefprintfunbattleshipsbships
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],它是{},它是{}

将计算替换为实际值,可以轻松地计算出:

在第一个调用中,您正在索引:

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

从0开始计算,这是最后一行,['0','0','0','0'],第一个元素,'0'。在

第二个调用的计算结果为:

^{pr2}$

所以最后第二行的第一个单元格['p','p','0','s']'p'。在

请注意,在Python中,您可以使用负索引,而不必先计算len();从函数中删除{},其工作原理将完全相同:

>>> 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将负索引视为从末尾开始计数;在内部,它将使用序列的长度(与序列一起存储)来计算相同的内容,但速度更快。在

>>> 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]和{}

Python首先调用battleships[c-b],因为c-b是{},所以它返回战列舰的最后一个列表(第4项)。i、 e['0','0','0','0'](索引从0开始)

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

现在对返回的列表调用[a-1],即['0','0','0','0']

['0','0','0','0'][a-1],因为a-1是{},所以python返回这个列表中的第一个项目。在

所以你得到了“0”。在

这同样适用于ab的不同值:

^{pr2}$

相关问题 更多 >