一、python的数据类型:
int整型
float 小数类型
string 字符串类型
布尔类型:True、False
可变变量:里面的元素可以随便修改
比如:list
不可变变量:里面的元素不能修改
比如:string、tuple
s = 'haso' s[2]='小黑' #报错,字符串不能通过下标修改值 s = '小黑' #重新赋值
比较运算符:
< > == <= >= != #返回True / False
二、列表(也叫:list、数组、array):
通过索引(下标、角标、编号)来取值,比string方便
newlist = [1,2,3,4] #最前面一个元素下标是0,最后一个元素下标是-1
列表根据列表中元素的编号来取元素:
print(newstus[1]) #取第2个元素
print(newstus[-1]) #取最后一个元素
三、list小练习
# 校验用户名是否合法: # 输入账号 #input # 如果账号存在的,提示已经被注册,如果不存在的,就让他注册 all_users[] #不能为空 #strip() #用户名长度长度6-12之间 len() #最多输入3次 #循环 all_users = ['zhangsan','wangwu','zhangwifi'] for i in range(3): username = input('请输入账号:').strip() if len(username)>5 and len(username)<13: if all_users.count(username)>0: print('这个名字太好啦,已经被注册啦!') else: print('名字不错,赶紧注册吧!') break else: print('用户名长度不合法!长度6-12之间!') else: print('失败次数过多')
四、列表的方法:
1)增:
cities = [] #定义一个空列表
①在列表末尾添加一个元素,一次只能添加一个元素
cities.append('北京')
②在指定位置,接受两个参数(索引号、新元素的值),增加元素
cities.insert(0, '上海') #在第一个位置增加元素
③extend()方法:接收一个参数,如果参数是列表或字符串,就将该参数中的每个元素分别添加到原有的列表中
cities = ['北京','上海']
cities.extend(['成都','深圳'])
cities.extend('abc')
print(cities)
>>> ['北京', '上海', '成都', '深圳', 'a', 'b', 'c']
2)删:
①删除指定位置的元素(不指定位置,默认删最后一个)
cities.pop(-1)
②指定元素的名字来删除
cities.remove('北京')
③清空list
cities.clear()
④删除指定位置的元素
del cities[-1]
3)修改:通过下标修改元素的值
cities[1] = '南京' ##修改的时候如果指定的下标不存在,会报错
4) 查:通过下标取值
print(cities[0]) #获取指定位置的值 print(cities.index('广州')) #获取某个元素的下标
print(cities.count('广州')) #查看/统计元素在list里面出现了多少次
5)翻转list
my_list = ['python','jmeter','charles','postman'] print(my_list.reverse()) #就是把这个list反转一下,返回None print(my_list) #打印翻转后的list
6)list排序
nums = [111, 33, 5, 8, 99] #或者num=['b','v','f'] nums.sort() #默认升序,返回None #>>> [5, 8, 33, 99, 111]nums.sort(reverse=True) #降序,返回None print(nums) #打印排序后list
7)合并list
print(list1+list2) #合并list print(list1 * 2) #复制几遍list
8)计算字符串或list长度
words = '广州' print(len(words))
>>> 2
五、多维数组:
list1 = [1,2,3,4] #一个普通的数组 list2 = ['marry','lily',[50,'monkey']] #二维数组 list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三维数组
【例】 :多维数组的取值
names=[ ['小黑',['小绿',138]],'小红',['小紫',['小白']]] print(names[-1][-1]) #['小白'] print(names[0][-1][-1])
六、list的切片:切片是list取值的一种方式
num = ['aaa','bbb','ccc','ddd'] #下标: 0 1 2 3 print(num[:]) #取所有的元素 print(num[1:3]) #顾头不顾尾,不包含右边下标的元素 #>>> [‘bbb’,’ccc’] print(num[1:]) #从头开始到某个下标结束,开头的下标可以不写 print(num[:2]) #从开头开始取,取到某个下标结束,开头的下标可不写
list以步长方式切片:
#如果步长是正数,从左往右开始取
#如果步长是负数,从右边开始取值
num = list(range(1,21)) print(num) #>>>[1,2,3....20] print(num[::2]) #步长,隔几个取一次 >>>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] print(num[::-2]) #步长,隔几个取一次 >>>[20, 18, 16, 14, 12, 10, 8, 6, 4, 2] print(num[0:10:2]) #步长(默认是1) >>>[1, 3, 5, 7, 9] print(num[::-1]) #反转list >>>[20, 19, ... 2, 1]
七、切片方式反转与rever反转的区别:
#list1.reverse() # reverse反转,改变了原来list的值
#list1[::-1] #切片方式反转,不会改变原来list的值
切片操作同样适合字符串(字符串不能通过下标修改值)
s = 'haso' print(s[0]) print(s[:3])
八、list循环:
lists = ['aaa','xiaoming',[1,2,3,4],'小黑'] for i in lists: print(i)
>>> aaa
xiaoming
[1, 2, 3, 4]
小黑
for i in range(4): #其它语言的遍历循环
print(lists[i])
九、string的循环:
str = 'a,xiaoming' for i in str: print(i)
#for循环在循环可迭代对象时,每次循环的是里面的每一个元素
十、判断一个变量的数据类型:type()
lists = ['a','xiaoming',[1,2,3,4]] for x in lists: if type(x)==list: #type()==str,int,float,list for i in x: print(i) print(x)
十一、list小练习
stus=[ ['小明','未交'], ['小白','已交'], ['小紫','已交'], ['小红','未交'], ['小绿','未交'], ['小黄','未交'], ['小黑','已交'] ] #二维数组 pass_list = [ ] #所有已经交作业的同学 fail_list = [ ] #没有交作业同学的名字 for stu in stus: status = stu[1] #状态 name = stu[0] #名字 if status == '未交': fail_list.append(name) else: pass_list.append(name) print('未交作业的所有同学是 %s ,总共有 %s 个人'%(fail_list,len(fail_list))) print('已交作业的所有同学是 %s ,总共有 %s 个人'%(pass_list,len(pass_list)))
输出:
未交作业的所有同学是 ['小明', '小红', '小绿', '小黄'] ,总共有 4 个人 已交作业的所有同学是 ['小白', '小紫', '小黑'] ,总共有 3 个人
十二、元组tuple:元组也是一个list,它和list的区别是元组里面的元素无法修改
t = (1,2,3,4,5)
#如果元组里面只有一个元素,必须在最后加一个逗号,
word = (1) #int类型 w = ('abc') #str类型 word = (1,) #元组 w = ('abc',) #元组
1)元组的方法:
t.index('abc') #找到元组中元素’abc’的下标 t.count('abc') #找到元组中’abc’的个数
十三、循环删list需要注意的一个问题:
#循环删list里面的数据的时候,结果会不正确:
lista = [1,1,2,3,4,5,6,8] for i in lista: if i%2 != 0: lista.remove(i) #期望删除奇数,保留偶数 print(lista)
>>> [1, 2, 4, 6, 8] #但实际上第二个1也是奇数,但没有被删除
解释:
lista = [1, 1, 3, 4, 6, 8] # 0 1 2 3 4 5 #第一次循环,删下标为0的,lista[0]=1 lista = [1, 3, 4, 6, 8] # 0 1 2 3 4 #第二次循环,删下标为1的,lista[1]=3,所以跨过了lista[0]=1,所有这个重复的1被保留了
解决:
lista = [1, 1, 3, 4, 6, 8] copy_list = [1, 1, 3, 4, 6, 8] #定义两个list(内存地址不一样) for i in copy_list: #循环的是copy_list,它里面的元素一直没变 if i%2 != 0: lista.remove(i) #然后删除的是原list中的元素 print(lista)
十四、深拷贝和浅拷贝:
#深拷贝内存地址不一样,浅拷贝指向同一块内存地址
import copy #copy模块 l = [1, 1, 3, 4, 6, 8] l2 = copy.deepcopy(l) #深拷贝,内存地址不一样 l3 = l #浅拷贝,指向同一块内存地址 l4 = [1, 1, 3, 4, 6, 8] print('l :%d l2:%d l3:%d l4:%d' % (id(l),id(l2),id(l3),id(l4)))
l :23849520 #内存地址一样
l2:24511472
l3:23849520 #浅拷贝,一样
l4:24511712
十五、判断的方法:非空即真,非0即真 #不为空true,空false ;非0true,0false
a = [] #空列表,false b = {} #空字典,false c = 0 #false d = tuple() #空元组,false e = '' # 空字符串,false print(bool(a)) #省去了判断这步
name = input("输入你的姓名:").strip() if name: #节省代码,以前是这样判段的是否为空name==''或者len(name)>0 print("输入正确") else: print("输入不能为空")
a = 'qqq'
b = 'ggg'
c = 'xxx'
d = 'sss'
l = [a,b,c,d]