1.二维列表
以下是一个名为list1的列表:
list1 = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
当我们利用换行,把各个元素分开并上下对齐,变成一个临时的表格:
list1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
他们都是同一个列表,如果我们要获取列表中的第二个元素,也就是表格中的第二行,可以用索引 list1[1] 表示。索引结果仍然是一个列表,我们可以对它继续索引,找出其中第三个元素:
list1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 找出 list1 中第二个元素
print(list1[1])
# 输出 [4, 5, 6]
# 找出 list1 中,第二个元素的第三个元素
print(list1[1][2])
# 输出:6
这就相当于,我们通过两步索引,找出了这个表格中位于第 2 行第 3 列的元素。那就表示我们要取某行某列的元素,那通用格式就是 列表[行数-1][列数-1]。
由于这种列表有了“行”和“列”,支持两步索引,所以我们把这样的结构称为 二维列表。
2.range() 函数
range() 函数能快速生成一个有规律的数字序列。该函数的语法格式为 range(start, stop, step),返回一个 range 对象,要用 list() 函数转换成列表。
range(start, stop, step)
start:表示计数从start开始,不填写的时候,默认从0开始
stop:计数到stop结束,但是不包含stop
step:计数的间隔,不填时默认为1
提示:如果你已经设好了 stop 参数和 step 参数的值,那 start 参数也必须填写!
# start 为 2, stop 为 5,间隔默认为 1
list1 = list(range(2, 5))
print(list1)
# 输出:[2, 3, 4]
# start 为 1, stop 为 9,间隔为 2
list2 = list(range(1, 9, 2))
print(list2)
# 输出:[1, 3, 5, 7]
# start 为默认值 0, stop 为 3,间隔默认为 1
list3 = list(range(3))
print(list3)
# 输出:[0, 1, 2]
#range() 的取值逻辑,和列表的切片是一样的, 选取范围包括起始位置,却不包括结束位置。这也是和我们之前说的切片设计逻辑是一样的道理,方便我们快速看出范围的元素数目。
3.列表需要注意的一些问题
①
scores = [66, 86, 58, 92, 70, 85, 99]
scores1 = scores.sort()
scores1 = scores1.reverse()
print(scores1)
# 报错:AttributeError: 'NoneType' object has no attribute 'reverse' in line 3.
#(属性错误:第三行中,NoneType 对象没有 reverse 属性。)
第二行代码中,scores1 =scores.sort(),而不是我们之前写的scores.sort()。
第三行写的是 scores1 = scores1.reverse(),也不是我们写的scores.reverse().
这样写是错误的,因为 sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表,所以它们是没有返回值的,或者说,返回的是 None。因此,第二行中,scores1 赋到的值是 None,再对 None 调用 reverse() 方法当然会出错。
②
name_class = ['李白','王维','杜甫','王之涣','王安石']
print(name_class[5])
# 报错:IndexError: list index out of range
# (索引错误:超出列表范围)
IndexError 指的是索引出了错。列表的索引是从 0 开始的,5 个人的列表,最后一个索引是4。索引 5 就是第 6 个元素,就超出范围了。
要查找列表的最后一个元素,索引是列表中元素的个数减 1(或者用反向索引,直接用 -1 即可)