读书笔记:《利用Python进行数据分析》之 Python列表

  •  列表

与元组类似,但列表的长度与包含的内容均可被修改。

1.生成方法

使用 [ ] 或 list 类型函数来定义列表。

#[]方法
In[1]: a = [1, 3, None]

#list函数
In[1]: a = (1, 3, None)
In[2]: b = list(a)
In[3]: b
Out[1]: [1, 3, None]

2.对列表的修改

可以使用append、insert、extend、+、bisect模块中的bisect、insort方法添加元素,remove、pop删除元素。

#append方法将元素添加至列表尾
In[1]: a = [1, 2, None]
In[2]: a.append(3)
In[3]: a 
Out[1]: [1, 2, None, 3]

#insert方法将元素添加至指定位置
In[1]: a = [1, 2, None]
In[2]: a.insert(2, 'foo')
In[3]: a
Out[1]: [1, 2, 'foo', None]

#insert方法因要遍历元素而比append方法计算代价更高
#extend方法将多个元素添加至列表尾
In[1]: a = [1, 2, None]
In[2]: a.extend([3, 'foo'])    #参数要以列表的形式写入
In[3]: a
Out[1]: [1, 2, None, 3, 'foo']

# + 号连接两个列表,和元组相同,不赘述

# + 号方法因连接创建了新列表且过程中要复制对象,其计算代价比extend方法更高

#构建大型列表时,可以使用for循环添加元素
#bisect模块实现了二分查找算法,可以对排好序的列表进行操作,但不会检查列表是否已经排序。

#bisect.bisect方法返回找到元素应当插入的位置
In[1]: import bisect
In[2]: a = [1, 2, 2, 2, 3, 7]
In[3]: bisect.bisect(a, 2)
Out[1]: 4

#bisect.insort方法将元素插入到元素应当插入的位置
In[1]: import bisect
In[2]: a = [1, 2, 2, 2, 3, 7]
In[3]: bisect.insort(a, 6)
In[4]: a
Out[1]: [1, 2, 2, 2, 3, 6, 7]
#pop方法移除特定位置的元素
In[1]: a = [1, 2, None, 2]
In[2]: a.pop(1)
In[3]: a 
Out[1]: [1, None, 2]

#remove方法移除第一个符合要求的值
In[1]: a = [1, 2, None, 2]
In[2]: a.remove(2)
In[3]: a 
Out[1]: [1, None, 2]

  3. 排序

 使用sort、sorted、reversed对列表元素排序。

#sort方法对列表进行内部排序,不会创建新对象
In[1]: a = [6, 3, 4, 8, 9]
In[2]: a.sort()
In[3]: a
Out[1]: [3, 4, 6, 8, 9]

#sort方法传参key进行二级排序
In[1]: a = ['saw', 'small', 'He', 'foxes', 'six']
In[2]: a.sort(key = len)
In[3]: a
Out[1]: ['He', 'saw', 'six', 'small', 'foxes']    #相同长度的元素相对位置不改变

#sorted方法对列表元素进行排序并产生一个拷贝
In[1]: sorted('horse race')
Out[1]: [' ', 'a', 'c', 'e', 'h', 'o', 'r', 'r', 's']

4.切片  

将start:stop:step传入索引符号,且均可缺省。 

#索引包含start起始位置但并不包含stop结束位置,因此获得元素数量为stop-start
 索引正向从0开始编号,逆向从-1开始编号
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:5]
Out[1]: [4, 5, 6, 7]
In[3]: seq[-3:-1]
Out[2]: [6, 7]

#start或stop缺省默认传入起始或结束位置
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:]
Out[1]: [4, 5, 6, 7, 8]
In[3]: seq[:-1]
Out[2]: [3, 4, 5, 6, 7]

#step表示隔几个取一个,取-1时可以对序列进行翻转
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:5:2]
Out[1]: [4, 6]
In[3]: seq[::-1]
Out[2]: [8, 7, 6, 5, 4, 3] 

#对变量赋值
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:2] = [10, 11]
In[3]: seq
Out[1]: [3, 10, 11, 5, 6, 7, 8]
#reversed方法讲序列元素倒序排列,仅在实例化(list函数或for循环)时可以实现,是一个生成器。
In[1]: list(reversed(range(10)))
Out[1]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

5.zip对列表进行配对 

zip可以将列表、元组或其他序列的元素配对,生成的列表长度由最短的序列决定。

#zip生成的元素是元组,使用zip(*)方法可以拆分出元组
In[1]: seq1 = [1, 2, 3]
In[2]: seq2 = ['a', 'b', 'c']
In[3]: z1 = zip(seq1, seq2)
In[4]: list(z1)
Out[1]: [(1, 'a'), (2, 'b'), (3, 'c')]
In[5]: seq3 = [True, False]
In[6]: z2 = zip(seq1, seq3)
In[7]: list(z2)
Out[2]: [(1, True), (2, False)]
In[8]: one, two = zip(*list(z2))
In[9]: one
Out[3]: (1, 2)

你可能感兴趣的:(读书笔记:《利用Python进行数据分析》之 Python列表)