列表(List)
一、列表的基本操作
1. 列表的建立
可以直接用中括号建立一个列表,也可以用内置类(list(可迭代对象))将可迭代对象里的每一个元素转换为列表里的每一个元素
names = ['干将莫邪','吕布','暗信','鬼谷子','盾山','嬴政','公孙离']
print(names)
# 结果:['干将莫邪', '吕布', '暗信', '鬼谷子', '盾山', '嬴政', '公孙离']
names = list('why20010602') #可迭代对象为 字符串
print(names)
# 结果:['w', 'h', 'y', '2', '0', '0', '1', '0', '6', '0', '2']
names = list(('干将莫邪','吕布','暗信','鬼谷子','盾山','嬴政','公孙离')) #可迭代对象为 元组
print(names)
# 结果:['干将莫邪', '吕布', '暗信', '鬼谷子', '盾山', '嬴政', '公孙离']
2. 列表中对下标的操作
可以使用下标来获取元素和对元素进行切片,同时还可以使用下标修改列表里的元素
# 利用下标修改元素
names = list(('干将莫邪','吕布','hhh','暗信','鬼谷子','盾山','嬴政','公孙离'))
names[2] = '廉颇'
print(names)
# 结果:['干将莫邪', '吕布', '廉颇', '暗信', '鬼谷子', '盾山', '嬴政', '公孙离']
# 利用下标切片(语法和字符串切片一样,包前不包后)
names = list(('干将莫邪','吕布','廉颇','暗信','鬼谷子','盾山','嬴政','公孙离'))
print(names[2:6])
# 结果:['廉颇', '暗信', '鬼谷子', '盾山']
二、 列表的增,删,改,查
一、增加元素(append(),insert(),extend())
1. append()(在列表最后追加一个元素)
names = ['干将','吕布','暗信','鬼谷子']
names.append('阿离')
print(names)
# 结果:['干将', '吕布', '暗信', '鬼谷子', '阿离']
2. insert()(在列表中插入数据 object ,使其成为第 index 个数据)
# 语法:insert(index,object)( insert 表示下标,即在哪个位置插入数据; object 表示对象,即插入那个数据)
names = ['干将', '吕布', '暗信', '鬼谷子', '阿离']
names.insert(2,'廉颇')
print(names)
# 结果:['干将', '吕布', '廉颇', '暗信', '鬼谷子', '阿离']
3. extend()(拼接两个列表使其成为一个列表)
# 语法:A.extend(B)(将列表 B 追加到 A 后,但 B 不变)
names = ['干将', '吕布', '廉颇', '暗信', '鬼谷子', '阿离']
heros = ['盾山','嬴政']
names.extend(heros)
print(names)
print(heros)
'''
结果:
['干将', '吕布', '廉颇', '暗信', '鬼谷子', '阿离', '盾山', '嬴政']
['盾山', '嬴政']
'''
二、列表删除元素(pop()、remove()、clear())
1. pop()(删除列表里最后一个元素并返回删除的这个元素)
# 语法:pop(index)(括号里没有值删除最后一个元素并返回元素值,否则删除第 index 个值并返回元素值)
AP = ['干将','王昭君','小乔','炸弹猫','嬴政','孙膑']
S = AP.pop()
print('AP = ',AP)
print('S = ',S)
'''
结果:
AP = ['干将', '王昭君', '小乔', '炸弹猫', '嬴政']
S = 孙膑
'''
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政']
S = AP.pop(2)
print('AP = ',AP)
print('S = ',S)
'''
结果:
AP = ['干将', '王昭君', '小乔', '炸弹猫', '嬴政']
S = 孙膑
'''
2. remove()(删除列表里指定一个元素,如果列表中无此元素会报错)
# 语法:remove(object)(删除 object 这个元素)
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政']
AP.remove('孙膑')
print(AP)
# 结果:['干将', '王昭君', '小乔', '炸弹猫', '嬴政']
3. clear()(删除列表里所有元素,删除后列表为空列表)
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政']
AP.clear()
print(AP)
# 结果:[]
三、列表查找元素(index()、count())
**1. index()(查找指定元素并返回其最小下标,如果没找到会报错) **
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政']
S = AP.index('孙膑')
print(S)
# 结果: 2
2. count()(返回指定查找元素出现的次数)
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政','孙膑']
S = AP.count('孙膑')
print(S)
# 结果: 2
3. 身份运算符(in)(判断元素是否在列表里,若在返回 True ,否则返回 False)
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政','孙膑']
S = '干将' in AP
print(S)
# 结果:True
四、列表修改元素(可以直接通过下标修改)
AP = ['干将','王昭君','孙膑','小乔','炸弹猫','嬴政','孙膑']
AP[6] = '妲己'
print(AP)
# 结果:['干将', '王昭君', '孙膑', '小乔', '炸弹猫', '嬴政', '妲己']
三、 列表的遍历(while循环遍历 / for···in···循环遍历)
注意:所有遍历都是针对可迭代对象的
一、for···in··· 循环遍历
AP = ['干将','王昭君','高渐离','小乔','炸弹猫','嬴政','妲己']
for i in AP:
print(i)
'''
结果:
干将
王昭君
高渐离
小乔
炸弹猫
嬴政
妲己
'''
二、while 循环遍历
AP = ['干将','王昭君','高渐离','小乔','炸弹猫','嬴政','妲己']
i = 0
while i < len(AP) :
print(AP[i])
i = i + 1
'''
结果:
干将
王昭君
高渐离
小乔
炸弹猫
嬴政
妲己
'''
四、列表的排序
注意:Python中特有交换两个变量值
a = 10
b = 20
a, b = b, a
print('a = ', a)
print('b = ', b)
'''
结果:
a = 20
b = 10
'''
a = 'why'
b = '20010602'
a, b = b, a
print('a = ', a)
print('b = ', b)
'''
结果:
a = 20010602
b = why
'''
一、冒泡排序(列表长度为 length,一共进行 length-1次 循环,每次循环中 前一个数 和 后一个数 进行比较,如果 前数大 交换两数,否则,不做操作,第一次比较 length-1 次,使最大数排到最后的位置,第二次比较 length-2 次,使第二大数排到倒数第二的位置······)
nums = [6, 5, 3, 1, 8, 7, 2, 4]
i = 0
while i < len(nums) - 1:
n = 0
while n < len(nums) - 1 - i:
if nums[n] > nums[n + 1]:
t = nums[n]
nums[n] = nums[n + 1]
nums[n + 1] = t
n = n + 1
i = i + 1
print(nums)
二、sort()排序(直接改变列表本身)
# 从小到大排序
nums = [6,5,3,1,8,7,2,4]
nums.sort()
print(nums)
# 结果:[1, 2, 3, 4, 5, 6, 7, 8]
# 从小到大排序
nums = [6,5,3,1,8,7,2,4]
nums.sort(reverse=True)
print(nums)
# 结果:[8, 7, 6, 5, 4, 3, 2, 1]
三、sorted()排序(不改变列表本身,返回一个排完序的列表)
# 从小到大排序
nums = [6, 5, 3, 1, 8, 7, 2, 4]
NUMS = sorted(nums)
print('NUMS = ', NUMS)
print('nums = ', nums)
'''
结果:
NUMS = [1, 2, 3, 4, 5, 6, 7, 8]
nums = [6, 5, 3, 1, 8, 7, 2, 4]
'''
五、列表的反转
一、reverse()反转
names = ['zhangsan','lisi','wangwu']
names.reverse(names)
print(names)
# 结果:['wangwu', 'lisi', 'zhangsan']
二、切片语法反转
names = ['zhangsan','lasi','wangwu']
names[::-1]
print(names)
# 结果:['zhangsan', 'lasi', 'wangwu']
六、列表的复制
一、copy()复制(复制一个列表,这个列表和原有列表内容一样,但指向不同的内存空间)
S = [100,200,300]
T = S.copy()
T[0] = 1
print('S = ',S)
print('T = ',T)
'''
结果:
S = [100, 200, 300]
T = [1, 200, 300]
'''
二、copy 模块复制(和 copy() 作用一样)
import copy # 实际上就是一个.py文件
S = [100,200,300]
T = copy.copy(S) # 和S.copy()作用一样
T[0] = 1
print('S = ',S)
print('T = ',T)
'''
结果:
S = [100, 200, 300]
T = [1, 200, 300]
'''
三、切片复制
S = [100,200,300]
T = S[::]
T[0] = 1
print('S = ',S)
print('T = ',T)
'''
结果:
S = [100, 200, 300]
T = [1, 200, 300]
'''
六、列表的练习
一、列表的嵌套
**题目:**一个学校,有3个办公室,现在有10位老师等待工位的分配,请编写程序,完成随机的分配
import random # 调用 random 模块
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
rooms = [[], [], []]
for i in teachers:
room = random.choice(rooms) # choice() 从列表里随机选择一个数据
room.append(i)
print(rooms, '\n')
# for 循环中带下标的遍历
for i, room in enumerate(rooms): # 第一层循环找到房间
print('房间 %d 里一共有 %d 个老师,分别是:' % (i, len(room)), end='')
for teacher in room: # 第二层循环找到房间里的每一个人
print(teacher, end='\t')
print()
'''
结果:
[['A', 'G', 'I', 'J'], ['C', 'D', 'H'], ['B', 'E', 'F']]
房间 0 里一共有 4 个老师,分别是:A G I J
房间 1 里一共有 3 个老师,分别是:C D H
房间 2 里一共有 3 个老师,分别是:B E F
'''
二、列表推导式(作用是使用简单的语法创建一个列表)
nums = [i for i in range(10)]
print(nums)
# 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
X =[i for i in range(10) if i % 2 == 0]
print(X)
# 结果:[0, 2, 4, 6, 8]
X = [(x,y) for x in range(5,9) for y in range(8,12)]
print(X)
'''
(结果是一个列表,但列表里的每一个元素是元组)
结果:
[(5, 8), (5, 9), (5, 10), (5, 11), (6, 8), (6, 9), (6, 10), (6, 11), (7, 8), (7, 9), (7, 10), (7, 11), (8, 8), (8, 9), (8, 10), (8, 11)]
'''
**习题:**请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,······100] 变成 [[1,2,3],[4,5,6]······]
m = [i for i in range(1, 101)]
n = [[m[j:j + 3] for j in range(0, 100, 3)]] # 在 0 到 100 并且步长是 3 循环内对 列表m 进行切片,并将切片之后的结果给 n 组成新的列表输出
print(n)
'''
结果:
[[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51], [52, 53, 54], [55, 56, 57], [58, 59, 60], [61, 62, 63], [64, 65, 66], [67, 68, 69], [70, 71, 72], [73, 74, 75], [76, 77, 78], [79, 80, 81], [82, 83, 84], [85, 86, 87], [88, 89, 90], [91, 92, 93], [94, 95, 96], [97, 98, 99], [100]]]
'''