如何检查是否到达列表末尾?
假设你有一个列表,比如说 a=[1,2,3]
,现在你想检查一下 a[4]
这个位置的值是不是空的(null)。有没有办法做到这一点,而不使用异常处理或者断言呢?
10 个回答
3
这里有一个方法,是我在Code Fights的一个游戏挑战中用到的。
简单来说,列表的结束是通过以下方式来定义的:
- 列表长度 - 当前索引(迭代次数) == 1
#!/usr/bin/python3
numbers = [1, 3, 5, 8, 10, 13, 16]
list_len = len(numbers)
for n in numbers:
current_idx = numbers.index(n)
print("Current Number:", numbers[current_idx])
list_end = list_len - current_idx
if list_end != 1:
next_idx = current_idx + 1
print("Next Number: ", numbers[next_idx])
else:
print("End Of List!")
3
假设我们有一个列表 a = [1,2,3]
:
a[2:3] 的结果是 [3],这表示从索引2开始,到索引3(不包括3)结束,所以只取到3这个元素。
a[3:4] 的结果是 [ ],这表示从索引3开始,到索引4(不包括4)结束,但因为索引3没有元素,所以结果是空列表。
所以 a[i:i+1] != [ ] 这个意思是,如果这个表达式不等于空列表,就说明 i 是 a 列表中的一个有效索引。
a[i:] 也是类似的功能,但 a[i:] 会生成一个新的列表,这个列表可能会很长,而 a[i:i+1] 如果不为空的话,只会包含一个元素。
9
len
可以告诉你列表的长度。根据文档的说法:
len(s)
返回一个对象的长度(项目数量)。参数可以是一个序列
(字符串、元组或列表)或一个映射(字典)。
当然,如果你想获取一个 list
、tuple
或 string
的最后一个元素,由于索引是从0开始的,而长度是元素的数量,所以你可以用 a[len(a)-1]
来获取最后一个项目。
顺便提一下,通常访问一个支持数字索引的对象(比如字符串、列表、元组等)最后一个元素的正确方法是使用 a[-1]
。显然,这种方法不需要用到 len
。