python D2
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
- 字符编码与转码
1 列表、元组操作
定义列表,访问元素
切片:获取多个元素
追加
修改
删除
In [1]: l = [1,3,5,6] In [2]: l[0] Out[2]: 1 In [3]: l[1] Out[3]: 3 In [4]: l[0:1] Out[4]: [1] In [5]: l[0:-1] Out[5]: [1, 3, 5] In [6]: l.extend([4,5,7]) In [7]: l Out[7]: [1, 3, 5, 6, 4, 5, 7] In [8]: l[0] = 100 In [9]: l[0] Out[9]: 100 In [10]: del l[0] In [11]: del l In [12]: l --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-12-12f54a96f644> in <module>() ----> 1 l NameError: name 'l' is not defined
扩展
拷贝
统计
排序&翻转
获取下标
In [33]: names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3] In [34]: names.sort() In [35]: names Out[35]: [1, 2, 3, 'Alex', 'Amy', 'Rain', 'Tenglan', 'Tom'] In [36]: names.re names.remove names.reverse In [36]: names.reverse() In [37]: names Out[37]: ['Tom', 'Tenglan', 'Rain', 'Amy', 'Alex', 3, 2, 1] In [38]: names.count(1) Out[38]: 1 In [40]: names.index(1) Out[40]: 7 In [41]: names Out[41]: ['Tom', 'Tenglan', 'Rain', 'Amy', 'Alex', 3, 2, 1]
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
它只有2个方法,一个是count,一个是index,完毕。
In [1]: a = ('星期一' , '星期二') In [2]: a.index('星期一') Out[2]: 0 In [3]: a.count('星期一') Out[3]: 1
2、字符串操作
特性:不可修改
name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 '---------------------Alex Li----------------------' name.count('lex') 统计 lex出现次数 name.encode() 将字符串编码成bytes格式 name.endswith("Li") 判断字符串是否以 Li结尾 "Alex Li".expandtabs(10) 输出'Alex Li', 将 转换成多长的空格 name.find('A') 查找A,找到返回其索引, 找不到返回-1 format : >>> msg = "my name is {}, and age is {}" >>> msg.format("alex",22) 'my name is alex, and age is 22' >>> msg = "my name is {1}, and age is {0}" >>> msg.format("alex",22) 'my name is 22, and age is alex' >>> msg = "my name is {name}, and age is {age}" >>> msg.format(age=22,name="ale") 'my name is ale, and age is 22' format_map >>> msg.format_map({'name':'alex','age':22}) 'my name is alex, and age is 22' msg.index('a') 返回a所在字符串的索引 '9aA'.isalnum() True '9'.isdigit() 是否整数 name.isnumeric name.isprintable name.isspace name.istitle name.isupper "|".join(['alex','jack','rain']) 'alex|jack|rain' maketrans >>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character >>> trantab = str.maketrans(intab, outtab) >>> >>> str = "this is string example....wow!!!" >>> str.translate(trantab) 'th3s 3s str3ng 2x1mpl2....w4w!!!' msg.partition('is') 输出 ('my name ', 'is', ' {name}, and age is {age}') >>> "alex li, chinese name is lijie".replace("li","LI",1) 'alex LI, chinese name is lijie' msg.swapcase 大小写互换 >>> msg.zfill(40) '00000my name is {name}, and age is {age}' >>> n4.ljust(40,"-") 'Hello 2orld-----------------------------' >>> n4.rjust(40,"-") '-----------------------------Hello 2orld' >>> b="ddefdsdff_哈哈" >>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则 True
3、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
添加
修改
删除
查找
In [1]: d={"name":"a","age":12,} In [2]: d2 = dict(name="a" , age=12) In [3]: d3 = dict(zip(['name','age'],["a",12])) In [4]: d Out[4]: {'age': 12, 'name': 'a'} In [5]: d2 Out[5]: {'age': 12, 'name': 'a'} In [6]: d3 Out[6]: {'age': 12, 'name': 'a'} In [7]: d["sex"] = "男" In [8]: d Out[8]: {'age': 12, 'name': 'a', 'sex': 'xe7x94xb7'} In [9]: d["sex"] = "女" In [10]: del d["sex"] In [11]: d Out[11]: {'age': 12, 'name': 'a'} In [12]: del d In [13]: d --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-13-e29311f6f1bf> in <module>() ----> 1 d NameError: name 'd' is not defined In [14]: "name" in d2 Out[14]: True
多级字典嵌套及操作
循环dict
In [16]: d2 Out[16]: {'age': 12, 'name': 'a'} In [17]: for k , v in d2.items(): ....: print(k,v) ....: ('age', 12) ('name', 'a') In [18]: In [18]: d2.keys() Out[18]: ['age', 'name'] In [19]: d2.values() Out[19]: [12, 'a'] In [20]: type(d2.values()) Out[20]: list
4、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s) set 的长度 x in s 测试 x 是否是 s 的成员 x not in s 测试 x 是否不是 s 的成员 s.issubset(t) s <= t 测试是否 s 中的每一个元素都在 t 中 s.issuperset(t) s >= t 测试是否 t 中的每一个元素都在 s 中 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
5、文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
In [24]: with open('test.txt' , 'w+') as f: f.write("aaa") In [28]: with open('test.txt' , 'r') as f: print(f.read())
6. 字符编码与转码
详细文章:
http://www.cnblogs.com/yuanchenqi/articles/5956943.html
http://www.diveintopython3.net/strings.html
1.在python2默认编码是ASCII, python3里默认是unicode
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
>>> import sys >>> print(sys.getdefaultencoding()) utf-8 >>> a = "啦啦" >>> a '啦啦' >>> print(a.encode('gb2312')) b'xc0xb2xc0xb2' >>> print(a.encode('gb2312').decode('gb2312')) 啦啦