主要内容:
- 基础数据结构:元组、列表、字典和集合
- Python函数
- 学习Python文件对象,以及如何与本地硬盘交互。
一、数据结构和数列
1. 元组
元组是一个固定长度,不可改变的Python序列对象。创建元组最简单的形式是用逗号分隔一列值:
tup=1,2,3
tup
Out[3]: (1, 2, 3)
用tuple函数可以将任意序列或迭代器转换为元组
a=tuple(range(3))
a
Out[5]: (0, 1, 2)
可以用方括号访问元组中的元素,序列从0 开始
元组中储存的对象可能是 可变对象,一旦创建了元组,元组中的对象就不能修改了:
li=tuple(['foo',[1,2],True])
li
Out[7]: ('foo', [1, 2], True)
li[2]=False
Traceback (most recent call last):
File "C:\Users\lenovo\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3437, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-8-b795e8412d61>", line 1, in <module>
li[2]=False
TypeError: 'tuple' object does not support item assignment
li[1].append(3)
li
Out[10]: ('foo', [1, 2, 3], True)
如果元组中的某个对象是可变的,比如列表,可以在原位进行修改。
可以用加号运算符将元组串联起来:
('a','b')+(1,2)+('add','x')
Out[15]: ('a', 'b', 1, 2, 'add', 'x')
元组乘以一个整数,像列表一样,会将几个元组的复制串联起来:
a=(1,2)
a*4
Out[17]: (1, 2, 1, 2, 1, 2, 1, 2)
对象本身并没有被复制,只是引用了他。
拆分元祖
将元组赋值给类似元组的变量,Python会试图拆分等号右边的值:
a = (1,2,3)
c,d,e=a
c
Out[20]: 1
变量拆分常用来迭代元组或列表序列
for a,b,c in seq:
print('a={0},b={1},c={2}'.format(a,b,c))
a=1,b=2,c=3
a=4,b=5,c=6
a=7,b=8,c=9
Python最近新增了更多高级的元组拆分功能,允许从元组的开头“摘取”几个元素。使用特殊的语法*rest:
values = 1,2,3,4,5
a,b,*rest = values
a,b
Out[26]: (1, 2)
rest
Out[27]: [3, 4, 5]
rest部分是想要舍弃的部分,rest的名字不重要。作为惯用写法,将不需要的变量使用下划线。
tuple方法:很有用的count(也适用于列表),可以统计某个值的出现频率:
a=(1,1,1,2,2,2,2,3,3,3,3,3,3)
a.count(3) #统计3出现的频率
Out[31]: 6
2、列表
与元组相比,列表的长度可变、内容可以被修改。可以用方括号定义,或用list函数:
a_list = [2,3,7,None]
b=(1,2,3)
list(b)
Out[34]: [1, 2, 3]
(1)添加和删除元素
append:在末尾添加元素
a_list.append('p')
[2, 3, 7, None, 'p']
insert:在特定位置插入元素
a_list.insert(0,1) #在0处插入值1
a_list
Out[40]: [1, 2, 3, 7, None, 'p']
pop:移除并返回指定位置的元素
l=a_list.pop(2)
l
Out[42]: 3
remove:去除某个值,remove会先寻找第一个值并除去。
in:检查列表是否包含某个值(反之 not in)
(2)串联和组合列表
与元组类似,可以用加号将两个列表串联起来:
x = [4,None,'foo']
y = [4,5,6]
x+y
Out[46]: [4, None, 'foo', 4, 5, 6]
如果已经定义了一个列表,用extend方法可以追加多个元素:
x.extend([3,3,[4,5]])
x
Out[48]: [4, None, 'foo', 3, 3, [4, 5]]
sort:将一个列表原地排序(不创建新的对象):
a=[0,5,1,7,6,3,2]
a.sort()
a
Out[51]: [0, 1, 2, 3, 5, 6, 7]
sort有一些选项,其中之一是二级排序key,可以用这个key进行排序。例如:按长度对字符串进行排序
s = ['one','two','three','four']
s.sort(key=len)
s
Out[54]: ['one', 'two', 'four', 'three']
sorted函数,产生一个排好序的序列副本。
(3)二分搜索和维护已排序的列表
bisect模块支持二分查找,和向已排序的列表插入值。bisect.bisect可以找到插入值后仍保证排序的位置,bisect.insort是向这个位置插入值:
import bisect
c=[1,2,2,2,3,