列表
1.格式
2.增删改查
列表下标:
0–n-1
-n-(-1)
#对列表进行切片
#0-(n-1)
#-n-(-1)
list=['dq','python','mm']
print(list[0:2])#[0,2)
print(list[-3:-2])#[-3,-2)
#输出
#['dq', 'python']
#['dq']
题目:
【1:4:2】:[1,4),步长为2
下标从0开始
3.添加元素
x元组,可迭代对象
#添加元素append
list=['dq','python','mm']
print(list)
list2=['dq','python','mm']
list.append(list2)
print(list)
list.append('2435')
print(list)
#输出
# ['dq', 'python', 'mm']
# ['dq', 'python', 'mm', ['dq', 'python', 'mm']]
# ['dq', 'python', 'mm', ['dq', 'python', 'mm'], '2435']
#添加元素insert
list=['dq','python','mm']
print(list)
list.insert(2,'33')
print(list)
#输出
#['dq', 'python', 'mm']
#['dq', 'python', '33', 'mm']
#添加元素extend
list=['33','jjjk','dq']
print(list)
x=('3243','3454')
list.extend(x)
print(list)
注意:可以直接使用+,连接两个列表
a=[1,2]
b=[5,6]
c=a+b
print(a,b,c,sep=' ',end='\n')
#[1, 2] [5, 6] [1, 2, 5, 6]
4.删除元素
#删除元素pop
list=['dq', 'python', 'mm']
print(list)
list.pop()
print(list)
list.pop(0)
print(list)
#输出
#['dq', 'python', 'mm']
# ['dq', 'python']
# ['python']
#删除元素remove
list=['dq', 'python', 'mm']
print(list)
list.remove('python')
print(list)
#清空元素clear
list=['dq', 'python', 'mm']
print(list)
list.clear()
print(list)#[]
#清空元素del
list=['dq', 'python', 'mm']
print(list)
del list
print(list)#<class 'list'>
题目:
1)
remove(3):删除3这个元素
2)
pop(4):删除下标4对应的元素
从0开始
3)
del删除下标3到后面全部
下标从0开始
5.修改元素
#修改元素
list=['dq', 'python', 'mm']
list[0]='i love python'
print(list[0])
print(list)
6.查询元素
(1)index查询指定数据在列表里面的最小索引,如果没有,会报错
(2)count查询指定数据在列表中出现的次数
(3)in运算符,查询指定函数是否在列表中,返回布尔数据
#查询元素
#(1)index查询指定数据在列表里面的最小索引,如果没有,会报错
# (2)count查询指定数据在列表中出现的次数
#
# (3)in运算符,查询指定函数是否在列表中,返回布尔数据
name = ['小陈','小红','小王','老王','老陈','小刘','小风','小刚','小赵']
print(name.index('小王'))
print(name.count('小王'))
print('赵日天' in name)
#输出
# 2
# 1
# False
list的地址传递
#地址传递
num1=[0,0,100]
num2=num1
num1[1]=88
print(num2)
#输出
#[0, 88, 100]
使用内置函数 id() 可以获取到一个变量的内存地址
代码:
#地址传递
num1=[0,0,100]
num2=num1
#26983000 26983000
print(id(num1),id(num2),sep=' ')
num1[1]=88
#26983000 26983000
print(id(num1),id(num2),sep=' ')
print(num2)
#输出
#[0, 88, 100]
list的遍历
#列表遍历for
list=['小陈','小红','小王','老王','老陈','小刘','小风','小刚','小赵']
for i in list:
print(i)
# 列表遍历while
i=0
while i<len(list):
print(list[i])
i+=1
list的排序
使用 list.sort() 会将 list 进行升序排序,返回 NoneType ,影响 list 本身【小-大】
使用 sorted(list) 会将 list 进行升序排序,返回 list ,不影响 list 本身【小-大】
#list排序sort-影响本身
list = ['2341', '962', '67', '34567']
print(list)
list.sort()
print(list)
#list排序sorted-不影响本身
list = ['2341', '962', '67', '34567']
print(list)
print(sorted(list))
print(list)
翻转:reserve
#list翻转
list = ['2341', '962', '67', '34567']
print(list)
list.reverse()
print(list)
编程实现冒泡排序算法,实现对[6, 5, 3, 1, 8, 7, 2, 4]的排序。
思想:让一个数字和它相邻的下一个数字进行比较运算,如果前一个数字大于后一个数字,则交换两个数据的位置。
#列表冒泡排序
#按第一个字符ASCII码排序
list=['2341','962','67','34567']
print(list)
for i in range(len(list)-1):
for j in range(len(list)-1-i):
if list[j]>list[j+1]:
temp=list[j]
list[j]=list[j+1]
list[j+1]=temp
print(list)
去除列表重复元素
1、使用set函数
set是定义集合的,无序,非重复
numList = [1,1,2,3,4,5,4]
print(list(set(numList)))
#[1, 2, 3, 4, 5]
2、先把list重新排序,然后从list的最后开始扫描
a = [1, 2, 4, 2, 4, 5,]
a.sort()
last = a[-1]
for i in range(len(a) - 2, -1, -1):
if last == a[i]:
del a[i]
else:
last = a[i]
print(a) #[1, 2, 4, 5]
3、使用字典函数
a=[1,2,4,2,4,]
b={}
b=b.fromkeys(a)
c=list(b.keys())
print(c) #[1, 2, 4]
4、append方式
def delList(L):
L1 = []
for i in L:
if i not in L1:
L1.append(i)
return L1
print(delList([1, 2, 2, 3, 3, 4, 5])) #[1, 2, 3, 4, 5]
5、count + remove方式
def delList(L):
for i in L:
if L.count(i) != 1:
for x in range((L.count(i) - 1)):
L.remove(i)
return L
print(delList([1, 2, 2, 3, 3, 4]))#[1, 2, 3, 4]
列表的嵌套
random.randint(a,b):[a,b]
import random
#列表的嵌套
teacher = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
room = [[], [], []]
for i in teacher:
room[random.randint(0, 2)].append(i)
print(room)
#输出:
#[[2, 10], [6], [1, 3, 4, 5, 7, 8, 9]]
列表推导式
range(n):[0,n-1]
#列表推导式
list=[i for i in range(11)]
print(list)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表的复制
浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。
深拷贝,完全拷贝了一个副本,容器内部元素地址都不一样
浅拷贝:a=b
copy(list)
copy.copy(list)
深拷贝:
copy.deepcopy(list)
#列表的复制b=a,浅拷贝
a=[1,2,'P']
b=a
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
#地址空间指向一样
#[1, 2, 'P'] 29181352
#[1, 2, 'P'] 29181352
#列表的复制copy1,浅拷贝,指拷贝了一层
a=[1,2,'P']
b=a.copy()
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
#地址空间指向不同
# [1, 2, 3] 20006312
# [1, 2, 3] 20007472
#列表的复制copy2,浅拷贝,指拷贝了一层
a=[1,2,3,[4,'V','B']]
b=a.copy()
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
#地址空间指向不同
# [1, 2, 3] 20006312
# [1, 2, 3] 20007472
#列表的复制copy.copy1,浅拷贝,指拷贝了一层
import copy
a=[1,2,'A']
b=copy.copy(a)
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
#地址空间指向不同
# [1, 2, 3] 23106584
# [1, 2, 3] 19097440
#列表的复制copy.copy2,深拷贝
import copy
a=[1,2,3,['U','X',7]]
b=copy.copy(a)
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
#地址空间指向不同
# [1, 2, 3] 23106584
# [1, 2, 3] 19097440
#列表的复制copy.deepcopy,深拷贝
import copy
a=[1,2,3,['U','O',7]]
b=copy.deepcopy(a)
b[0]='dq'
print(a,id(a),sep=' ',end='\n')
print(b,id(b),sep=' ',end='\n')
题目:
浅拷贝,地址空间指向一样
列表和字符串的互相转换
同时输出列表和字符串
1.字符串>列表:split()
a = 'my first python'
b = a.split(" ")
print(b)
输出:
2.列表>字符串:join()
a = ['my', 'first', 'python']
b = ' '.join(a)
print(b)
输出:
示例:
def __str__(self):
#print('style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+str(self.furnituresList) + '\n')
#return 'style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+str(self.furnituresList) + '\n'
return 'style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+' '.join(self.furnituresList) + '\n'
练习1-求列表中最大值及下标
#求列表中最大值及下标-sorted
list=[1,345,32435,78,324,7685]
list2=sorted(list)
print(('最大值=%d 下标=%d')%(list2[len(list2)-1],list.index(list2[len(list2)-1])))
#求列表中最大值及下标-for
list = [1, 345, 32435, 78, 324, 7685]
max = index = 0
for i in list:
max=max if max >i else i
index=list.index(max)
print(('最大值=%d 下标=%d')%(max,index))
练习2-移除列表空字符串
#移除列表空字符串remove()-每次只移除一个
list = ['小陈', '小红', '', '小王', "", '老王', '老陈', "", '小刘', '小风', '小刚', '小赵']
print(list)
for i in list:
if i=='':
list.remove('')
print(list)
练习3-计算 chars 列表中每个字符出现的次数
#1
#计算 chars 列表中每个字符出现的次数。chars = ['a', 'c', 'x', 'd', 'p', 'a', 'm', 'q', 's', 't', 'a', 'c']
chars = ['a', 'c', 'x', 'd', 'p', 'a', 'm', 'q', 's', 't', 'a', 'c']
list = []
for i in chars:
check = i + "=" + str(chars.count(i))
if (check in list) == False:
list.append(check)
print(list)