一、变量、元组的赋值和循环删除
(1)多个变量同时赋值
#多个变量赋值
a,b,c,d=1,2,3,4
x=y=m=n=520
print(a,b,c,d,x,y,m,n)
(2)不引入第三方变量下,交换a、b赋值
a,b=1,2
#python方法
a,b=b,a #python后台会引入第三方变量 #数学方法(字符串不适用)
a=a+b
b=a-b
a=a-b
(3)变量重新复制之后寻址地址会改变
a='hahah'
b=a #list中,b和a指向同一内存地址
print('赋值之前a:',id(a))
print('赋值之前b:',id(b))
a='sk' #变量重新赋值,重新分配地址空间
print(a)
print(b)
print('赋值之后a:',id(a))
print('赋值之后b:',id(b))
(4)循环删除,每次循环下标变化导致删除错误元素
a=[1,1,2,3,4,5,6,43]
for i in a:
if i%2!=0:
a.remove(i)
print(a) [1, 2, 4, 6] #每循环一次数组修改一次,下标修改一次,循环删list会导致下标错乱 解决方法:通过另外一个相同list来负责循环查找,通过元素内容删除
a=[1,1,2,3,4,5,6,43]
b=[1,1,2,3,4,5,6,43] #或者b=a[:]
for i in b:
if i%2!=0:
a.remove(i) #i此时为具体元素,通过元素删除而不是下标删除
二、list切片
print(stus[1:3]) #list切片,两个下标之间切片,包含第一个下标,不包含最后一个下标,顾头不顾尾
stus[2:-1] #-1表示结尾
stus[:3] #从开头取可不写前边的,取到最后可不写后边的
print(nums[0:11:3]) #3为步长,隔几个取一个,不写默认隔一个取一个(挨着取),0/11可不写
print(nums[11:0:-1]) #步长为负数,从结尾开始取,11/0可不写
print(nums[5:1:-1]) #倒序取
三、布尔值:非空即真,非0即真
a=[]
b=''
c=()
d=None
#以上都是空,都是假 ——>if not usermae or not passwd or not repasswd 判断输入是否为空 e=1 #真
f=0 #假 not a #取反
if a :
print('真')
else :
print('假') import this #可以查看内部函数怎么定义的
四、元组
元组,值不可以修改,没有增删改,防止误操作 cities=('bj','tj')
#cities[0]='sd' #定义好后不允许修改,修改会报错 sql=('ip','3306','root','1234566','jxz') 查
cities[0]
cities.count('bj')
cities.index('bj') s='涛涛'
#s[0]='许' #字符串定义好后也不允许修改,可以重新赋值
print(s)
print(s.replace('涛','aa')) #字符串的方法只是返回新的值,不会修改字符串
print(s)
五、字典
字典以K-V形式存储,字典是无序的
shanbl={
'name':'shanbl',
'age':18,
'phone':18511401127,
'qq':675516462,
'age':17 #相同key,后边会覆盖以前的
}
print(shanbl['name']) #增
shanbl['女朋友']='where'
shanbl.setdefault('girlfrind','come here') shanbl['age']=28 #没有添加,有就修改
shanbl.setdefault('age',27) #如果key已经存在,不会修改 print(shanbl) #修改
shanbl['女朋友']='where' #这种方法。能增加,能修改 #删除
shanbl.pop('age') #根据指定的key删除,key不存在会报错
del shanbl['name'] #根据指定的key删除,key不存在会报错
#shanbl.clear() #清空字典
shanbd={'gege':'sbd'}
shanbl.update(shanbd) #将一个字典b加入另一个字典a,如果有重名,更新
print(shanbl.keys())
print(shanbl.values()) #取值
print(shanbl['qq']) #不存在报错,不实用
print(shanbl.get('phone1','18618171127')) #不存在返回none,可自定义取不到时的默认值 for i in shanbl :
print(i) #只能取到key #for i in shanbl.items() :
print(i) #同时 取到key和value d={'a':1,'b':2}
print(d.items()) #items先把字典转为list for k,v in d.items() :
print(k,v) for k in d :
print(k,d.get(k)) #循环key,并根据key去到值,性能上快
小练习:
#记录学生是否交作业
#输入学生名字
#日期
#是否已交 data = {'tt':
{'2018':'未交'} } for i in range (5):
name = input ('name').strip()
date = input ('date').strip()
status=input('status') #可以不写 # d[data]=status
# data[name]=d
# print(d,data) if name and data :
status = '已交' if status else '未交' #三元表达式
if name in data : #判断学生是否存在
data[name][date]=status #如果学生已存在,直接添加日期和状态
else :
tmp = {date:status} #{2018:未交} 先构造一个小字典
data[name]=tmp #给大字典添加学生,并赋值小字典 print('添加后的',data) 三元表达式
五、循环查找
(1)列表、元组的循环查找
a=['a','b','c']
#a=('a','b','c')
for i in a :
print(i)
(2)字典的循环查找
z={'a':1,'b':2,'c':3}
for i in z :
print(i) #只能取到key
for i,j in z.items() : #通过字典的items函数获取key和value变量
print(i,j)
for i in z :
print(i,z.get(i)) #通过字典get函数取value
(3)字符串循环查找
a='assfgghjj'
for i in a :
print(i) #循环取每个字符
(4)读文件循环取每一行
f=open('data','r')
for line in f :
print(line)