python-列表
列表
列表的基本使用
列表格式
格式:[元素1, 元素2, 元素3, ..., 元素n]
列表中元素可以是不同类
tmp = ['xiaoWang',180, 65.0]
下表获取元素
name = ['xiaoWang','xiaoZhang','xiaoHua']
print(name[0])
print(name[2])
print(name[2:3])
列表的增删改查
帮助方法
ctrl+点击要查询的字段
语法:
# insert(index,object) 需要两个参数
# index 表示下标,在哪个位置插入数据
# object 表示对象,具体插入哪个数据
添加元素
append
append会把新元素添加到列表末尾
A = ['xiaoWang','xiaoZhang','xiaoHua']
temp = input('请输入要添加的学生姓名:')
print(A.append(temp))
print(A)
insert
insert(index, object) 在指定位置index前插入元素object
strs = ['a','b','m','s']
strs.insert(3,'h')
print(strs)
extend
通过extend可以将另一个集合中的元素逐一添加到列表中
a = ['a','b','c']
b = ['d','e','f']
a.extend(b)
print(a)
print(b)
修改元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
A[1] = 'xiaoLu'
print(A)
查找元素
in,not in
in(存在),如果存在那么结果为true,否则为false
not in(不存在),如果不存在那么结果为true,否则false
nameList = ['xiaoWang','xiaoZhang','xiaoHua'] #待查找的列表
findName = input('请输入要查找的姓名:') #获取用户要查找的名字
if findName in nameList: #查找是否存在
print('在列表中找到了相同的名字')
else:
print('没有找到')
index,count
index用来查找元素所在的位置,如果未找到则会报错;
count用来计算某个元素出现的次数
a = ['a', 'b', 'c', 'a', 'b']
a.index('a', 1, 3) # 注意是左闭右开区间
a.index('a', 1, 4)
a.count('b')
a.count('d')
删除元素
del
del:根据下标进行删除
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
del movieName[2]
print('------删除之后------movieName=%s' % movieName)
pop
----默认会删除列表里最后一个数据,并且返回这个数据
pop:删除最后一个元素
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.pop()
print('------删除之后------movieName=%s' % movieName)
----pop还可以传入index参数,用来删除指定位置上的数据
a=['s','f','t']
b=a.pop(1)
print(a) ---['s', 't']
print(b) ---f
remove
----删除指定的元素
remove:根据元素的值进行删除
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.remove('指环王')
print(moveName)
print('------删除之后------movieName=%s' % movieName)
clear
----clear 用来清空一个列表
a=['a','b','c','d']
a.clear()
print(a) ----[]
列表的遍历
----遍历: 将所欲的数据都访问一遍。遍历针对的是可迭代对象
for in 遍历
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
for a1 in a:
print(a1)
while遍历
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
i = 0
while i < len(a):
print(a[i])
i += 1
列表的嵌套
schoolNames = [[1, 2, 3], [11, 22, 33], [111, 222, 333]]
print(schoolNames[1][2])
schoolNames[1][2] = 'abc'
print(schoolNames)
[[1, 2, 3], [11, 22, 'abc'], [111, 222, 333]]
print(schoolNames[1][2][2])-----c
应用
-----一个学校,有3个办公室,现在有8位老师等待工位的分配,
import random
off=[[],[],[]] -----定义一个列表用来保存3给办公室
names=['A','B','C','D','E','F','G','H'] ---定义一个列表存储8位老师姓名
i=0
for name in names:
index = random.randint(0,2)
off[index].append(name)
i=1
for tempNames in off:
print('办公室%d的人数为:%d'%(i,len(tempNames)))
i+=1
for name in tempNames:
print("%s"%name,end='')
print("\n")
print("-"*20)
列表推导式
-----所谓的列表推导式,就是指的轻量级循环创建列表
1基本方式
a=[x for x in range(4)]
print(a)
----[0, 1, 2, 3]
b=[x for x in range(3,4)]
print(b)
----[3]
a = [x for x in range(3, 19)]
print(a)
----[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
a = [x for x in range(3, 19, 2)]
print(a)
----[3, 5, 7, 9, 11, 13, 15, 17]
2循环中使用if
a = [x for x in range(3, 10) if x % 2 == 0]
print(a)
----[4, 6, 8]
a=[x for x in range(3,10) if x%2!=0]
print(a)
----[3, 5, 7, 9]
a = [x for x in range(3, 10)]
print(a)
----[3, 4, 5, 6, 7, 8, 9]
3 2个for循环
a = [(x, y) for x in range(1, 3) for y in range(3)]
print(a)
----[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
4 3个for循环
a = [(x, y, z) for x in range(1, 3) for y in range(3) for z in range(4, 6)]
print(a)
习题
实现分组一个 list 里面的元素,比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]
a=[x for x in range(1,101)]
b=[a[x:x+3]for x in range(0,len(a),3)]
print(b)
列表的复制
copy方法
----将原来的列表进行复制,变成一个新的列表,这种复制方式是浅复制
nums1=[1,5,3,6,8,1]
nums2=nums1.copy()
nums2[0]=100 ----修改新列表里的数据,不会影响到原有列表里的数据
print(nums2)---[100, 5, 3, 6, 8, 1]
print(nums1)---[1, 5, 3, 6, 8, 1]
copy模块
----copy模块提供了浅复制和深复制两种方式
浅拷贝
----拷贝了引用,并没有拷贝内容
import copy
words1=['hello','good',['yes','ok'],'bad']
words2=copy.copy(words1)
words2[0]='你好'
words2[2][0]='no'
print(words1)----['hello', 'good', ['no', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']
深拷贝
----深拷贝是对于一个对象所有层次的递归拷贝
----深拷贝会将对象里的所有数据都进行拷贝
import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
words2 = copy.deepcopy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1)----['hello', 'good', ['yes', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']
切片
----切片其实就是一种浅拷贝
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
words2 = words1[:]
words2[0] = '你好'
words2[2][0] = 'no'
print(words1)----['hello', 'good', ['no', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']
x = [100, 200, 300]
y = x ----等号是内存地址的赋值
z = x.copy() ----调用copy方法,可以复制一个列表
x[0] = 1
print(z) ----[100, 200, 300]
#使用copy模块实现
import copy
a=copy.copy(x)
print(a) ----[1, 200, 300]
冒泡排序
nums = [6, 5, 3, 1, 8, 7, 2, 4]
i = 0
while i < len(nums) - 1:
i += 1
n = 0
while n < len(nums) - 1:
if nums[n] > nums[n + 1]:
nums[n], nums[n + 1] = nums[n + 1], nums[n]
n += 1
print(nums)
列表排序
nums = [6, 5, 3, 1, 8, 7, 2, 4]
x = sorted(nums)
print(nums)
print(x)
求列表里最大的数
nums = [3, 1, 9, 8, 4, 6, 7, ]
x = nums[0]
index = 0
i = 0
while i < len(nums):
if nums[i] > x:
x = nums[i]
index = i
i += 1
print('最大%d,下表%d' % (x, index))
删除空字符串
words=['hello','good','','','yes','ok','']
words2=[]
for word in words:
if word != '':
words2.append(word)
words=words2
print(words)
-----在使用for...in循环遍历列表时,最好不要对元素进行增删操作
words=['hello','good','','','yes','ok','']
for word in words:
if word == '':
words.remove(word)
print(words)
words=['hello','good','','','yes','ok','']
i = 0
while i < len(words):
if words[i] == "":
words.remove(words[i])
i -= 1
i += 1
print(words)

浙公网安备 33010602011771号