一、for循环
经常和range()函数一起出现。
range的特点:前闭后开,默认从零开始,默认步长为1
代码段中的range(5)等价于[0,5)
for i in range(5):
print(i) # 0 1 2 3 4
for i in range(18,8,-3):
print(i) # 18 15 12 9
二、列表
列表是一个可修改的,元素以逗号分隔,以中括号包括的有序序列。
重点:有序,可修改
a=[] #空列表
b=[1,2]
print(a,type(a)) #[] <class 'list'>
print(b,type(b)) #[1, 2] <class 'list'>
(一)遍历
a=[1,'a','b','c']
print(a[0],a[1],a[2],a[3])
#while循环
i=0
while i<len(a):
print('第',i+1,'个值为:',a[i])
i+=1
#for循环
#1
for i in a:
print('第',i,'个值为:',a[i])
#2
for i in range(len(a)):
print('第', i, '个值为:', a[i])
(二)拼接,重复
a = [1, 2]
b = [3, 4, 5]
c = a + b
print(c) #[1, 2, 3, 4, 5]
d = a * 3
print(d) #[1, 2, 1, 2, 1, 2]
(三)切片
a=[10,20,30,40,50,60,70]
b=a[2:5]
print(b) #[30, 40, 50]
a=['a','b','c',1,2,3,4,5]
b=a[2:7:2]
print(b) # ['c', 2, 4]
b=a[2:]
print(b) # ['c', 1, 2, 3, 4, 5]
b=a[:3]
print(b) # ['a', 'b', 'c']
print(a) # ['a', 'b', 'c', 1, 2, 3, 4, 5]
注:切片操作并不影响原列表
[2:5]–> [2,5),同range,前闭后开,默认步长也是1
该代码段实现了列表的逆向输出:
a=['a','b','c']
for i in range(-1,-len(a)-1,-1):
print(i,':',a[i])
这里涉及到了python中的负下标。python是支持负下标的,-1代表最后一个元素的索引,然后从后向前,依次减1。
(四)使用’*'进行可变初始化
a,b=[1,2]
print('a:',a) # a: 1
print('b:',b) # b: 2
a,*b=[1,2,3,4]
print('a:',a) # a: 1
print('b:',b) # b: [2, 3, 4]
*a,b=[1,2,3,4,5]
print('a:',a) # a: [1, 2, 3, 4]
print('b:',b) # b: 5
(五)增加操作
1.append()方法–在末尾追加
a=[1,2,3,4]
a.append(9)
print(a) # [1, 2, 3, 4, 9]
2.extend()方法–扩展,与’+‘号产生的结果相同;区别在于它改变原列表,而’+'号不改变
a.extend('b')
print(a)
3.insert()方法–插入,在指定位置插入元素
a=[1,2,3,4]
a.insert(2,'a')
print(a) # [1, 2, 'a', 3, 4]
(六)删除操作
1.pop()方法–弹出,返回并删除,默认为最后一个,也可指定索引(从右向左)
a=[1,2,3,4]
b=a.pop()
print(b) # 4
b=a.pop(1)
print(b) # 2
print(a) # [1,3]
2.remove()方法–删除第一个参数指定的元素值(从左往右)
a=[1,2,3,4,3,7,6]
a.remove(3)
print(a) # [1, 2, 4, 3, 7, 6]
3.del 方法–可删除列表中的一个元素,也可删除整个列表(非列表独有)
a=[1,2,3,4,5,6,7]
del a[2]
print(a) # [1, 2, 4, 5, 6, 7]
del a
print(a) # 提示错误,列表a不存在
(七)修改操作
1.直接通过索引修改
a=[3,1,2,4,3,6,7]
a[3]=99
print(a) # [3, 1, 2, 99, 3, 6, 7]
2.reverse()方法–将列表顺序颠倒
a=[3,1,2,4,3,6,7]
a.reverse()
print(a) # [7, 6, 3, 4, 2, 1, 3]
3.sort()方法–排序函数,默认升序
a=[3,1,2,4,3,6,7]
a.sort()
print(a) # [1, 2, 3, 3, 4, 6, 7]
# reverse=True -- 表示降序
a.sort(reverse=True)
print(a) # [7, 6, 4, 3, 3, 2, 1]
a=['ab','Ab','Bc']
a.sort()
print(a) # ['Ab', 'Bc', 'ab']
# key=str.lower -- 按照小写进行比较
a=['ab','Ab','Bc']
a.sort(key=str.lower)
print(a) #['ab', 'Ab', 'Bc']
4.sorted()方法–对列表进行排序,并写入新的列表,且不改变原列表
a=[1, 2, 3, 3, 4, 6, 7]
b=sorted(a)
print(b) # [1, 2, 3, 3, 4, 6, 7]
print(a) # [3, 1, 2, 4, 3, 6, 7]
(八)查找操作
1.count()方法–计数,返回参数对应的元素值个数
a=[1,2,3,4,1,1,3,4]
b=a.count(3) #元素'3'的个数
print(b) # 2
2.index()方法–查找,从左向右返回找到的第一个参数对应的元素值的索引
a=[1,2,3,4,1,1,3,4]
x=a.index(4) #返回第一次出现元素'4'的索引值
print(x) # 3
扩展:
遍历二维列表:
a=[[1,2,3],[4,5,6,7],[8,9],10]
for x in a:
if type(x)!=list:
print(x)
else:
for y in x:
print(y,end=' ')
print()
# 输出 3 6 9
print(a[0][2])
print(a[1][2])
print(a[2][1])
(九)深浅拷贝
首先先好好体会一下赋值符号’=’
a=[1,2,3]
b=a
a.append(4)
print(a,b) # [1, 2, 3, 4] [1, 2, 3, 4]
print(id(a),id(b)) # 33710664 33710664
print(a is b) # True
a=3
b=a
a=5
print(a,b) # 5 3
下面说一下is和’= ='的区别,
is判断的是a对象是否就是b对象,是通过id来判断的
'= ='判断的是两个值是否相等,是通过value来判断的
a=[1,2,3]
b=[1,2,3]
print(a==b) # True
print(a is b) # False
a='abc'
b='abc'
print(id(a)) # 30935392
print(id(b)) # 30935392
下面正式开始说明赋值、浅拷贝、深拷贝的区别:
import copy
a=[1,2,3,[4,5,[10,20]],6]
b=a
c=copy.copy(a)
d=copy.deepcopy(a)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))
a.append(7)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))
a[3].append(99)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))
结果:
[1, 2, 3, [4, 5, [10, 20]], 6] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000
[1, 2, 3, [4, 5, [10, 20]], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000
[1, 2, 3, [4, 5, [10, 20], 99], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20], 99], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20], 99], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000
由上述代码可以总结出:
'='赋值操作:改变的是变量的内存地址。
浅拷贝:仅拷贝了最外层,内部和原列表指向的是同一内存空间。
深拷贝:从内到外全部拷贝走,原列表改变与它无关。
三、元组
元组是一个不可修改的,元素以逗号分隔,以小括号包括的有序序列。
重点:有序,不可修改
a=(1,2,3,[4,5])
a[0]=9 #报错
# 元组不可修改,但是元祖中的可修改类型的变量可以修改
a[3].append(99)
print(a) #(1, 2, 3, [4, 5, 99])
(一)遍历、合并、重复、使用’*'进行可变初始化
这里跟列表都很相似,就放在一起说了。
#遍历
a=(1,2,3,4)
for x in a:
print(x)
#二维遍历
names=(('张三',19),('李四',20),('王五',30))
for x,y in names:
print(x,':',y)
#合并、重复
a=(1,2)
b=(3,4)
print(a+b) # (1, 2, 3, 4)
print(a*2) # (1, 2, 1, 2)
# 需要注意的是:这里的*b使b变成了列表类型,而不再是元组类型
a,*b=(1,2,3,4,5)
print(a) # 1
print(b) # [2, 3, 4, 5]
(二)强制类型转换
# 强制类型转换 tuple--元组 list--列表
a=[1,2,3]
b=tuple(a)
print(type(b)) # <class 'tuple'>
c=list(b)
print(type(c)) # <class 'list'>
(三)在元组中,’,'号超重要!
a=(1)
print(type(a)) # <class 'int'>
a=(1,)
print(type(a)) # <class 'tuple'>
a=1,2
print(a,type(a)) # (1, 2) <class 'tuple'>
a=[1]
print(type(a)) # <class 'list'>
(四)查找操作
1.index()方法–查找参数第一次出现的索引值
a=(1,2,3,4)
print(a.index(4)) # 3
print(a.index(4,0,3)) # 报错,范围内没有 后两个参数为查找的范围,同样左闭右开
(五)enumerate()–枚举方法
a=(11,12,13,'a')
for x in enumerate(a):
print(x)
结果:
(0, 11)
(1, 12)
(2, 13)
(3, 'a')
应用
输出7的倍数和以7结尾的数,且总结个数:
a=(1,2,3,4,5,6,7,8,9,10,14)
gs=0
for x in a:
if x%7==0 or x%10==7:
gs+=1
print(x)
print('共',gs,'个')
统计元组中奇数和偶数的个数:
a=(1,2,3,4,5,6,7,8,9,10,14)
js=0
os=0
for x in a:
if x%2==0:
os+=1
else:
js+=1
print('奇数有:',js,'个;偶数有:',os,'个')
求出元组中的最大值,最小值,以及它们对应的下标:
a=(3,2,5,1,4,9,7)
max=a[0]
min=a[0]
x=0
y=0
for i in range(1,len(a)):
if max < a[i]:
max=a[i]
x=i
elif min > a[i]:
min=a[i]
y=i
i+=1
print('''
最大值:%d:%d
最小值:%d:%d''' % (x,max,y,min))
两列表对应项相加,并赋值给一个新列表,输出:
big=[1,2,3,3,2,5]
small=[11,22,8,7,5,9]
s=[]
for i in range(len(big)):
s.append(big[i]+small[i])
print('第', i + 1, '个月业绩:', s[i])
i+=1
传送站:
import time
a=[1,2,3,4,5,6]
while True:
t = a[0]
i = 0
while i < len(a) - 1:
a[i] = a[i + 1]
i += 1
a[i] = t
time.sleep(1)
print(a)
列表元素倒序:
#1
a=[1,2,3,4,5,6]
i=0
while i<len(a)//2:
# t=a[i]
# a[i]=a[len(a)-i-1]
# a[len(a)-i-1]=t
a[i],a[len(a)-1-i]=a[len(a)-1-i],a[i]
i+=1
print(a)
#2
a=[1,2,3,4,5,6]
i=0
j=len(a)-1
while i<j:
# t=a[i]
# a[i]=a[j]
# a[j]=t
a[i],a[j]=a[j],a[i]
i+=1
j-=1
print(a)
计算a列表中含有b列表的个数:
a=[1,2,3,4,1,2,5,1,1,2]
b=[1,2]
n=0
for i in range(len(a)-1):
# c=[]
# c.append(a[i])
# c.append(a[i+1])
# if c==b:
# n+=1
if a[i]==b[0] and a[i+1]==b[1]:
n+=1
i+=1
print(n)