【Python数据分析基础-5】数据结构之列表
0. 引入
上篇文章介绍了元组,提到了元组的内容和长度无法改变,这篇文章说说列表。列表与元组十分相似,但是列表的长度以及内容都是可以修改的。
1. 列表的创建及获得
列表可以通过中括号[]或list函数进行定义,这样定义出来的列表便是空列表:
a = list()
b = []
print(a, b)
[][]
同时,可以利用list函数将其他的数据结构转化为列表:
t = (1, 2, '3', None)
list(t)
[1, 2, '3', None]
又如将迭代器或者生成器转为列表:
list(range(5))
[0, 1, 2, 3, 4]
2. 元素的增加与移除
2.1 元素的增加
常用的列表元素增加方法为:append方法、insert方法
append方法将元素添加到列表的尾部:
x = list(range(5))
x.append(6)
print(x)
[0, 1, 2, 3, 4, 6]
insert方法可以将元素插入到指定位置(索引从0开始):
x = list(range(5))
x.insert(1, 6) ## 在索引为1的位置插入元素6
print(x)
[0, 6, 1, 2, 3, 4]
2.2 元素的移除
常见的列表元素移除方法为:pop、remove、del
pop方法如果不传入参数的话,默认弹出列表最后一个元素,若传入参数,则为弹出相应位置的元素:
x = list(range(5))
print(x.pop())
print(x)
4
[0, 1, 2, 3]
pop弹出的元素是可以获取的,弹出后列表便无该元素。
x = list(range(5))
print(x.pop(2)) # 弹出索引为2的元素
print(x)
2
[0, 1, 3, 4]
remove方法则是移除符合要求值的元素:
x = list(range(5, 10))
x.remove(7) # 移除元素7
print(x)
[5, 6, 8, 9]
del方法用于与pop相似,但不会弹出元素:
x = list(range(5))
del x[2] # 移除索引为2的元素
print(x)
[0, 1, 3, 4]
3. 列表的连接与联合
列表的连接与联合有两种方法,一种是直接使用“+”将两个列表相连接,另一种是使用extend方法:
# 创建2个列表
x1 = list(range(5))
x2 = list(range(5, 10))
print(x1, x2)
[0, 1, 2, 3, 4] [5, 6, 7, 8, 9]
直接相连
print(x1+x2)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
extend方法
x1.extend(x2)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
两种方法中“+”是代价更高的方法,因为这个过程中创建了新列表,并且还需要复制对象。所以若有大规模数据,使用extend将元素添加到已存在列表中是更好的方法。
4. 列表切片
使用切片方法可以取列表子集,基本形式是**[start:stop]**,其中切片出的序列包含索引为start的元素,不包含索引为stop的元素。
x = list(range(5, 15))
print(x)
print(x[5: 10])
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
其中stop和start可以省略。省略start时,表示从序列的起始位置开始,到stop的位置:
x[:5]
[5, 6, 7, 8, 9]
省略stop时,表示从序列的stop开始,到序列的结束位置:
x[5:]
[10, 11, 12, 13, 14]
负索引可以从序列的尾部进行索引:
x[-4:-1] # 表示从序列的倒数第4个元素开始,到倒数第1个元素,其中倒数第1个元素不可取
[11, 12, 13]
步进值step在第二个冒号后面使用,表示每隔几个数取一个值:
x = list(range(5, 15))
print(x)
x[::2]
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[5, 7, 9, 11, 13]
特别地,[::-1]表示将序列进行翻转
x[::-1]
[14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
下一篇文章,将介绍内建序列函数!