本节内容:
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
一、列表、元组操作
1. 列表: 列表是我们使用频率最高的数据类型之一,由一个中括号 [ ]括起来,里面的值可以是任何类型(也可以是一个列表)。
列表的创建:
names = ['Island' , 'zhuzhu', 'zhu']
列表的主要使用方法有:增、删、改、查。
增:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] 2zhu1 = ['e', 'fg'] 3zhu.append('a zhu') #第一种方法——.append()括号内加上所要加的内容,默认加到最后一位。 4print(zhu) #结果:['a', 'b', 'c', 1, 2, [3, 'd'], 'a zhu'] 5 6zhu.insert(2, 'azhu') #第二种方法——.insert() 在第2个位置前强行加入需要的内容 7print(zhu) #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu'] 8 9zhu.extend(zhu1) #第三种方法——.extend()在zhu列表的后边扩展zhu1 10print(zhu) #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu', 'e', 'fg']
删:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] 2zhu.remove('c') #删除指定元素 3print(zhu) #结果:['a', 'b', 1, 2, [3, 'd']] 4 5del zhu[0] #利用索引值删除指定元素 6print(zhu) #结果:['b', 1, 2, [3, 'd']] 7 8zhu.pop() #删除列表最后一个值 9print(zhu) #结果:['b', 1, 2]
改:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] 2 3zhu[3] = '变' #利用索引值修改 4print(zhu) #结果:['a', 'b', 'c', '变', 2, [3, 'd']]
查:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] 2 3print('zhu[1]:', zhu[1], '\nzhu[-1]:', zhu[-1]) #:利用索引值查找,索引值为负时表示倒数第n个 (\n为换行) 4#结果:zhu[1]: b 5# zhu[-1]: [3, 'd']
统计:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] 2print(zhu.count('a')) #统计元素个数 3 #结果:2
获取下标:
1zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] 2print(zhu.index('a')) #获取下标 默认从左到右搜索找到的第一个元素,获取他的下标 3 #结果:0 4print(zhu.index('a',2)) #获取第二个'a'的下标 5 #结果:6
排序和反转:
1# zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] 2# zhu.sort() 3# 结果: 4# Traceback (most recent call last): 5# File "C:/Users/48316/PycharmProjects/untitled1/zhu1/text_.py", line 2, in <module> 6# zhu.sort() 7# TypeError: unorderable types: int() < str() py3之后不同的数据类型不能排序 8zhu = ['a', 'b', 'c', '1', '2', 'a', '2', '5'] 9zhu.sort() #按照ASCII码排序 10print(zhu) #结果['1', '2', '2', '5', 'a', 'a', 'b', 'c'] 11zhu.reverse() #反转 12print(zhu) #结果['c', 'b', 'a', 'a', '5', '2', '2', '1']
**2.元组:**元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。它只有2个方法,一个是count,一个是index,完毕。
语法:
1zhu = ('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5') #和列表基本类似 只是用圆括号括起来 2print(zhu) #结果:('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5')
二、字符串操作
特性:不可修改。
各种操作:
1#_author: "a zhu" 2#_date: 2018/2/1 3 4str='abcd EFGH ijk' #直接创建字符串 用引号括起来 5 6print(str.upper()) #将字符串内所有的字符大写 7#结果:ABCD EFGH IJK 8 9print(str.casefold())#将字符串内所有的字符小写 10#结果:abcd efgh ijk 11 12print(str.capitalize())#将字符串首字母大写 13#结果:Abcd efgh ijk 14 15print(str.count(' ')) #统计字符‘ ’出现次数 16#结果:2 17 18print(str.endswith('jk'))#判断字符串是否以'jk'结尾 19#结果:True 20 21print(str.center(30,'-')) #给字符串两边加上'-',一共30个 22#结果:--------abcd EFGH ijk--------- 23 24print(str.find(' ')) #找到字符' '的索引值,找不到返回-1 25#结果:4 26 27 28msg = "my name is {}, and age is {}." 29print(msg.format('飞天zhuzhuxia','19')) 30#结果:my name is 飞天zhuzhuxia, and age is 19. 31 32msg = "my name is {1}, and age is {0}." 33print(msg.format('飞天zhuzhuxia','19')) 34#结果:my name is 19, and age is 飞天zhuzhuxia. 35 36msg = "my name is {name}, and age is {age}." 37print(msg.format(age='19', name='飞天zhuzhuxia')) 38#结果:my name is 飞天zhuzhuxia, and age is 19. 39 40print(msg.partition('is')) #从'is'出断开 变为三个元素组成的元组 41#结果:('my name ', 'is', ' {name}, and age is {age}.') 42 43print(str.ljust(20,'-')) 44#结果:abcd EFGH ijk------- 45 46print(str.rjust(20,'-')) 47#结果:-------abcd EFGH ijk
三、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
字典的创建:
1dict ={ 2 'shannxi': 'xian', 3 'sichuan': 'chengdou', 4 'hunan': 'zhengzhou', 5 'shanxi': 'taiyuan', 6 'beijing': 'sanlitun' 7} #字典由一对一对的键值对组成
字典的增、删、改、查:
增加:
1dict['shanghai'] = '东方明珠'#直接输入新的键值,给简直赋值就可增加 2print(dict) 3#结果:{'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shannxi': 'xian', 'shanghai': '东方明珠', 'beijing': 'sanlitun'}
删除:
1dict.pop('shanxi') 2print(dict) 3#结果:{'sichuan': 'chengdou', 'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} 4del dict['sichuan'] 5print(dict) 6#结果:{'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} 7dict.popitem()#随机删除 8print(dict) 9#结果:{'beijing': 'sanlitun', 'hunan': 'zhengzhou'}
修改:
1dict['beijing'] = 'chaoyang' #利用键值进行修改 2print(dict) #结果:{'beijing': 'chaoyang', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shanxi': 'taiyuan', 'shannxi': 'xian'}
查看:
1print(dict['shanxi']) #利用键值可以查看 但是如果没有该键值就会报错 2#结果:taiyuan 3print(dict.get('sichuan1'))#这样就不会报错 如果没有就会返回None
其他:
1print(dict.values()) 2#结果:dict_values(['xian', 'zhengzhou', 'chengdou', 'taiyuan', 'sanlitun']) 3print(dict.keys()) 4#结果:dict_keys(['beijing', 'hunan', 'sichuan', 'shanxi', 'shannxi']) 5 6b = {1: 2, 3: 4} 7dict.update(b) 8print(dict) 9#结果:{1: 2, 'sichuan': 'chengdou', 3: 4, 'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'shannxi': 'xian', 'beijing': 'sanlitun'}
循环dict:
1for key in dict: 2 print(key,dict[key]) 3'''hunan zhengzhou 4shannxi xian 5beijing sanlitun 6shanxi taiyuan 7sichuan chengdou''' 8for k,v in dict.items(): #会先把dict转成list,数据里大时莫用 9 print(k,v) 10'''hunan zhengzhou 11shannxi xian 12shanxi taiyuan 13beijing sanlitun 14sichuan chengdou'''
四、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
各种使用方法:
1s = set([3, 5, 9, 10]) # 创建一个数值集合 2 3t = set("Hello") # 创建一个唯一字符的集合 4 5t.add('c') #添加元素 6print(t) #结果:{'H', 'c', 'e', 'l', 'o'} 7 8s.update([10,37,42]) # 在s中添加多项 9print(s) #结果:{3, 37, 5, 9, 10, 42} 10 11t.remove('H') #删除指定元素 12print(t) #结果:{'c', 'e', 'l', 'o'} 13 14print(len(s)) #set的长度 15#结果:6 16 17print('x' in s) #测试x是否是s的成员 18#结果:False 19print('x' not in s ) #测试x是否不是s的成员 20#结果:True 21print(s.issubset(t)) #结果:False 22#s <= t 测试是否s中的每一个元素都在t中 23 24print(s.issuperset(t))#结果:False 25#s >= t #测试是否t中的每一个元素都在s中 26 27print(s.union(t)) #结果:{'e', 3, 42, 37, 5, 'l', 'c', 9, 10, 'o'} 28#s | t 返回一个新的set包含s和t中的每一个元素 29 30print(s.intersection(t))#结果:set() 31#s & t 返回一个新的set包含s和t中的公共元素 32 33print(s.difference(t))#结果:{3, 5, 37, 9, 10, 42} 34#s - t 返回一个新的set包含s中有但是t中没有的元素 35 36print(s.symmetric_difference(t))#结果:{'l', 3, 37, 5, 9, 10, 42, 'e', 'c', 'o'} 37#s ^ t 返回一个新的set包含s和t中不重复的元素
五、文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现在有一个word文件如下:
纤云弄巧,飞星传恨,银汉迢迢暗度。
金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。
两情若是久长时,又岂在朝朝暮暮。
1f = open('鹊桥仙') #打开文件 2data=f.read()#获取文件内容 3f.close() #关闭文件
注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统
默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。
三种最基本的文件打开模式:
1# f = open('鹊桥仙2','r') #打开文件 只读 2# f = open('鹊桥仙2','w') #打开文件 只写 3# f = open('鹊桥仙2','a') #打开文件 追加 4#如果系统找不到要打开的文件名,则会创建一个文件。
集体操作:
1f = open('鹊桥仙') #打开文件 2# data1=f.read()#获取文件内容 3# data2=f.read()#获取文件内容 4# 5# print(data1) 6# print('...',data2) 7# data=f.read(5)#获取文件内容 8 9# data=f.readline() 10# data=f.readline() 11# print(f.__iter__().__next__()) 12# for i in range(5): 13# print(f.readline()) 14 15# data=f.readlines() 16 17# for line in f.readlines(): 18# print(line) 19 20 21# 问题来了:打印所有行,另外第3行后面加上:'end 3' 22# for index,line in enumerate(f.readlines()): 23# if index==2: 24# line=''.join([line.strip(),'end 3']) 25# print(line.strip()) 26 27#切记:以后我们一定都用下面这种 28# count=0 29# for line in f: 30# if count==3: 31# line=''.join([line.strip(),'end 3']) 32# print(line.strip()) 33# count+=1 34 35# print(f.tell()) 36# print(f.readline()) 37# print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同. 38# print(f.read(5))#一个中文占三个字符 39# print(f.tell()) 40# f.seek(0) 41# print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符 42 43#terminal上操作: 44f = open('鹊桥仙2','w') 45# f.write('hello \n') 46# f.flush() 47# f.write('world') 48 49# 应用:进度条 50# import time,sys 51# for i in range(30): 52# sys.stdout.write("*") 53# # sys.stdout.flush() 54# time.sleep(0.1) 55 56 57# f = open('鹊桥仙2','w') 58# f.truncate()#全部截断 59# f.truncate(5)#全部截断 60 61 62# print(f.isatty()) 63# print(f.seekable()) 64# print(f.readable()) 65 66f.close() #关闭文件
其他的文件模式:
1# f = open('鹊桥仙2','w') #打开文件 2# f = open('鹊桥仙2','a') #打开文件 3# f.write('莫等闲1\n') 4# f.write('白了少年头2\n') 5# f.write('空悲切!3') 6 7 8# f.close() 9 10#r+,w+模式 11# f = open('鹊桥仙2','r+') #以读写模式打开文件 12# print(f.read(5))#可读 13# f.write('hello') 14# print('------') 15# print(f.read()) 16 17 18# f = open('鹊桥仙2','w+') #以写读模式打开文件 19# print(f.read(5))#什么都没有,因为先格式化了文本 20# f.write('hello alex') 21# print(f.read())#还是read不到 22# f.seek(0) 23# print(f.read()) 24 25#w+与a+的区别在于是否在开始覆盖整个文件 26 27 28# ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!' 29# 大家会说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!! 30# f = open('鹊桥仙2','r+') #以写读模式打开文件 31# f.readline() 32# f.readline() 33# f.readline() 34# print(f.tell()) 35# f.write('hello 岳飞') 36# f.close() 37# 和想的不一样,不管事!那涉及到文件修改怎么办呢? 38 39# f_read = open('小重山','r') #以写读模式打开文件 40# f_write = open('小重山_back','w') #以写读模式打开文件 41 42# count=0 43# for line in f_read: 44 # if count==3: 45 # f_write.write('hello,岳飞\n') 46 # 47 # else: 48 # f_write.write(line) 49 50 51 # another way: 52 # if count==3: 53 # 54 # line='hello,岳飞2\n' 55 # f_write.write(line) 56 # count+=1
文件操作还有许多小点就不一一列举了。
面试题小分享:
11.python的最大递归层数是多少?
999
12.求结果
1v1 = 1 or 3 #v1=1 2 v2 = 1 and 3 #v2=3 3 v3 = 0 and 2 and 1 #v3 = 0 4 v4 = 0 and 2 or 1 #v4 = 1 5 v5 = 0 and 2 or 1 or 4 #v5 = 1 6 v6 = 0 or Flase and 1 #v6=0#a=10 b=20
and
x and y
布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
(a and b) 返回 20。
or
x or y
布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。
(a or b) 返回 10。
not
not x
布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
not(a and b) 返回 False
#python具体的运算符的用法请参考:http://www.runoob.com/python/python-operators.html
13.ascii、unicode、utf-8、gbk的区别?
1简单说一下吧: 2ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符, 3 4Unicode是为了统一世界各国语言的不用,统一用2个bytes代表一个字符,可以表达2**16=65556个,称为万国语言,特点:速度快,但浪费空间,可以用在内存处理中,兼容了utf-8,gbk,ASCII, 5 6utf-8 为了改变Unicode的这种缺点,规定1个英文字符用1个字节表示,1个中文字符用3个字节表示,特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来的, 7 8gbk 是中文的字符编码,用2个字节代表一个字符,
14.字节码和机器码的区别?

1简单来说: 2机器码:是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。 3字节码:是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
View Code
15.三元运算规则以及应用场景?

1#先说下三元运算符的表达式: 2#为真时的结果 if 判定条件 else 为假时的结果 3#事例 41 if 3>2 else 0 #输出:1
View Code
16.列举 Python2和Python3的区别?
11.print 函数 22.Unicode 33.除法运算 44.异常处理 55.xrange 66.不等运算符 77.去掉了repr表达式 88.多个模块被改名(根据PEP8) 99.数据类型 10详细请看:http://www.runoob.com/python/python-2x-3x.html 或者:https://www.cnblogs.com/weikunzz/p/6857971.html
17.用一行代码实现数值交换:a=1 , b=2
a, b = b, a
18.Python3和Python2中 int 和 long的区别?
1int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数。 2long(长整数):或渴望,无限大小的整数,这样写整数和一个大写或小写的L。 3float(浮点实际值):彩车,代表实数,小数除以整数部分和小数部分的书面。花车也可能是在科学记数法与E或指示的10次方é(2.5e2= 2.5×102=250)。 4complex (复数):+ BJ的形式,其中a,b是彩车和J(或J)表示-1的平方根(这是一个虚数)。 a是真正的数字部分,b是虚部。复数不使用Python编程。
19.xrange和range的区别?

1#range 2#函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表。 3#eg: 4 range(10) 5#输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 6 range(2,10) 7#输出[2, 3, 4, 5, 6, 7, 8, 9] 8 range(2,10,2) 9#输出[2, 4, 6, 8] 10 type(_) 11#输出<type 'list'> 12 13 14 15 16#xrange 17#函数说明:和range 的用法完全相同,但是返回的是一个生成器。 18#eg: 19 xrange(10) 20#输出xrange(10) 21xrange(2,10) 22#输出xrange(2, 10) 23xrange(2,10,2) 24#输出xrange(2, 10, 2) 25type(_) 26#输出<type 'xrange'> 27list(xrange(2, 10, 2)) 28#输出[2, 4, 6, 8] 29 30#但是要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用。
View Code
20.文件操作时:xreadlines和readlines的区别?

1* readline() >> reads a single line from file with newline at the end。 2 3 readline()读取一行内容,放到一个字符串变量,返回str类型。 4 5* readlines() >> returns a list containing all the lines in the file 6 7readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。 8 9* xreadlines() >> Returns a generator to loop over every single line in the file 10 11 返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同
View Code
n
x and y
布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
(a and b) 返回 20。