python——字符串、列表、字典、集合、文件操作,循环
一、各种操作
1、字符串
a.字符串格式化输出
name = "x5456" print "i am %s " % name #输出: i am x5456 PS: 字符串是 %s;整数 %d;浮点数%f
b.查找字符串(find)
str.find(str, start=0, end=len(mystr)) #
检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1
>>> str = 'xinge 好帅' >>> str.find('xing') 0 >>> str.find('好') 6
c.查找替换字符串中内容(replace)
mystr.replace(str1, str2, mystr.count(str1)) # 把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.
>>> str = 'abcabcabc' >>> str.replace('a','xinge',2) 'xingebcxingebcabc'
d.以str为分割符切片(split)
mystr.split(str=" ", 2) # 以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串
>>> str = 'a\nb\tc' >>> str 'a\nb\tc' >>> str.split() ['a', 'b', 'c']
f.将字符串首字母大写(capitalize)
>>> str='abc' >>> str.capitalize() 'Abc'
g.把字符串的每个单词首字母大写(title)
>>> str = "hello world" >>> str.title() 'Hello World'
h.startswith,endswith
startswith # 检查字符串是否是以str 开头, 是则返回 True,否则返回 False
endswith # 检查字符串是否以str结束,如果是返回True,否则返回 False.
i.upper,lower
upper # 转换 mystr 中所有字符为大写
lower # 转换 mystr 中所有字符为小写
j.strip,lstrip,rstrip
strip # 清除左右两边的空格
lstrip # 清除左边的空格
rstrip # 清除右边的空格
k.join
mystr.join(str) # mystr 中每个字符后面插入str,构造出一个新的字符串
>>> '123'.join('abc') 'a123b123c'
2、列表
a.切片
1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] 2 >>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4 3 ['Tenglan', 'Eric', 'Rain'] 4 5 >>> names[1:-1] #取下标1至-1的值,不包括-1 6 ['Tenglan', 'Eric', 'Rain', 'Tom'] 7 8 >>> names[0:3] 9 ['Alex', 'Tenglan', 'Eric'] 10 11 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样 12 ['Alex', 'Tenglan', 'Eric'] 13 14 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写 15 ['Rain', 'Tom', 'Amy'] 16 17 >>> names[3:-1] #这样-1就不会被包含了 18 ['Rain', 'Tom'] 19 20 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个 21 ['Alex', 'Eric', 'Tom'] 22 23 >>> names[::2] #和上句效果一样 24 ['Alex', 'Eric', 'Tom']
b.追加
1 >>> names 2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy'] 3 4 >>> names.append("我是新来的") 5 6 >>> names 7 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
c.插入
1 >>> names 2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] 3 4 >>> names.insert(2,"强行从Eric前面插入") 5 6 >>> names 7 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] 8 9 >>> names.insert(5,"从eric后面插入试试新姿势") 10 11 >>> names 12 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
d.修改
1 >>> names 2 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] 3 4 >>> names[2] = "该换人了" 5 6 >>> names 7 ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
e.删除
1 >>> del names[2] 2 3 >>> names 4 ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] 5 6 >>> del names[4] 7 8 >>> names 9 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] 10 11 >>> names.remove("Eric") #删除指定元素 12 13 >>> names 14 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的'] 15 16 >>> names.pop() #删除列表最后一个值 17 '我是新来的' 18 19 >>> names 20 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
f.列表合并
1 >>> names 2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy'] 3 4 >>> b = [1,2,3] 5 6 >>> names.extend(b) 7 8 >>> names 9 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
g.浅copy
1 >>> names 2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3] 3 4 >>> name_copy = names.copy() 5 6 >>> name_copy 7 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
h.深copy
1 import copy 2 3 n1 = [1,2,3] 4 5 n2 = copy.deepcopy(n1)
i.统计
1 >>> names 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] 3 4 >>> names.count("Amy") 5 2
j.排序&翻转
1 >>> names 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] 3 >>> names.sort() #排序 4 Traceback (most recent call last): 5 File "<stdin>", line 1, in <module> 6 TypeError: unorderable types: int() < str() #3.0里不同数据类型不能放在一起排序了,擦 7 >>> names[-3] = '1' 8 >>> names[-2] = '2' 9 >>> names[-1] = '3' 10 >>> names 11 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] 12 >>> names.sort() 13 >>> names 14 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom'] 15 16 >>> names.reverse() #反转 17 >>> names 18 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
k.获取下标
1 >>> names 2 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1'] 3 >>> names.index("Amy") 4 2 #只返回找到的第一个下标
3、元组
元组和列表的区别就是元组不可更改,所以它只有2个方法,count和index。
4、字典(键值对集合)
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
特性:
- dict是无序的
- key必须是唯一的,天生去重
a.增加
1 >>> info["stu1104"] = "abc" 2 >>> info 3 {'stu1102': 'x5456', 'stu1104': 'abc', 'stu1103': 'Mali', 'stu1101': 'Wu'}
b.修改
1 >>> info['stu1101'] = "xinge" 2 >>> info 3 {'stu1102': 'x5456', 'stu1103': Mali', 'stu1101': 'xinge'}
c.删除
1 >>> info 2 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤兰'} 3 >>> info.pop("stu1101") #标准删除姿势 4 '武藤兰' 5 >>> info 6 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} 7 >>> del info['stu1103'] #换个姿势删除 8 >>> info 9 {'stu1102': 'LongZe Luola'} 10 >>> 11 >>> 12 >>> 13 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} 14 >>> info 15 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} #随机删除 16 >>> info.popitem() 17 ('stu1102', 'LongZe Luola') 18 >>> info 19 {'stu1103': 'XiaoZe Maliya'}
d.查找
1 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} 2 >>> 3 >>> "stu1102" in info #标准用法 4 True 5 >>> info.get("stu1102") #获取 6 'LongZe Luola' 7 >>> info["stu1102"] #同上,但是看下面 8 'LongZe Luola' 9 >>> info["stu1105"] #如果一个key不存在,就报错,get不会,不存在只返回None 10 Traceback (most recent call last): 11 File "<stdin>", line 1, in <module> 12 KeyError: 'stu1105'
e.获取所有键/值
1 #values 2 >>> info.values() 3 dict_values(['LongZe Luola', 'XiaoZe Maliya']) 4 5 #keys 6 >>> info.keys() 7 dict_keys(['stu1102', 'stu1103'])
f.字典合并
1 #update 2 >>> info 3 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} 4 >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"} 5 >>> info.update(b) 6 >>> info 7 {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
g.深copy
import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n4 = copy.deepcopy(n1)
h.字典循环
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #会先把dict转成list,数据里大时莫用 print(k,v)
5、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作:
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”的一个浅复制
6、文件读写
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
f = open('lyrics') #打开文件 first_line = f.readline() print('first line:',first_line) #读一行 data = f.read()# 读取剩下的所有内容,文件大时不要用 print(data) #打印文件 f.close() #关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f: ...
二、循环
一、while循环
while 条件: # 循环体 # 如果条件为真,那么循环体则执行 # 如果条件为假,那么循环体不执行
二、for循环
用户按照顺序循环可迭代对象中的内容,
li = [11,22,33,44] for item in li: print item
- break:跳出整个循环
- continue:跳出当前循环
enumrate
为可迭代的对象添加序号
li = [11,22,33] for k,v in enumerate(li, 1): print(k,v)
range
指定范围,生成指定的数字
print range(1, 10) # 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9] print range(1, 10, 2) # 结果:[1, 3, 5, 7, 9] print range(30, 0, -2) # 结果:[30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2]