面试题答案
一键面试matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = [[sub_list[0], sub_list[-1]] for sub_list in matrix]
print(new_list)
切片操作在多维数据结构中的应用规则
- 基本规则:对于二维列表(类似矩阵结构),外层列表的索引用于选择行,内层列表的索引用于选择列。切片操作
[start:stop:step]
同样适用,start
为起始索引(包含),stop
为结束索引(不包含),step
为步长。 - 选择行:例如
matrix[1:3]
会选择第2行到第3行(索引从0开始),结果是[[4, 5, 6], [7, 8, 9]]
。 - 选择列:由于列表没有直接按列切片的语法,但可以通过遍历行,对每行进行切片操作来实现。如要获取每一行的前两列,可以使用
[[sub_list[0:2] for sub_list in matrix]]
,结果是[[1, 2], [4, 5], [7, 8]]
。
需要注意的地方
- 索引范围:要确保索引在合法范围内,否则会抛出
IndexError
。例如,访问matrix[3]
会出错,因为只有0、1、2三个合法的行索引。 - 步长的影响:步长为负数时,切片方向会改变。如
matrix[::-1]
会将矩阵的行逆序排列。 - 内存和性能:切片操作会生成新的对象(浅拷贝),对于大型多维数据结构,可能会消耗较多内存。如果只是想遍历特定部分的数据而不生成新对象,可以考虑使用生成器表达式。