列表: 有序的保存一组数据;列表中的元素可以是不同类型的,但是一般情况下,列表里都只保存单一类型的值
list内置类需要一个可迭代对象,可以将一个可迭代对象转换成为列表
转换字典时,只会保留字典的key
words = list({'name': 'zhangsan', 'age': 18, 'height': 180})
print(words) #['name', 'age', 'height']
使用下标获取列表元素
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
print(namesList[0]) #xiaoWang
1.增加元素:
append 会把新元素添加到列表末尾
names = ['zhangsan', 'lisi', 'wangwu']
names.append('jerry')
print(names) #['zhangsan', 'lisi', 'wangwu', 'jerry']
insert insert(index, object) 在指定位置index(下标)前插入元素object
strs = ['a','b','m','s']
strs.insert(3,'h')
print(strs) # ['a', 'b', 'm', 'h', 's']
extend 通过extend可以将另一个集合中的元素逐一添加到列表中
a.extend(b) ==> 把b里的所有元素都添加到a里
a = ['a','b','c']
b = ['d','e','f']
a.extend(b)
print(a) # ['a', 'b', 'c', 'd', 'e', 'f'] 将 b 添加到 a 里
print(b) # ['d','e','f'] b的内容不变
列表之间可以使用加法运算符,将两个列表合并成为一个列表。
fruits = ['apple', 'banana', 'pear']
foods = ['rice', 'noddle']
x = fruits + foods
print(x) #['apple', 'banana', 'pear', 'rice', 'noddle']
2.删除元素:
clear 清空列表里的所有元素
a = [1, 2, 3, 4, 5]
a.clear()
print(a) #[]
a = [] #重新赋值,也可以实现清空的效果
pop 删除指定位置上(根据下标)的元素;如果不传参数,默认是最后一个;pop方法有返回值,返回值是被删除的元素
fruits = ['apple', 'banana', 'pear']
y = fruits.pop(1)
print(y) #banana
print(fruits) #['apple', 'pear']
remove 需要参数(只能一个),根据元素的值进行删除
fruits = ['apple', 'banana', 'pear']
fruits.remove('apple')
print(fruits) #['banana', 'pear']
del 根据下标进行删除,也可以直接删除变量
fruits = ['apple', 'banana', 'pear']
del fruits[0]
print(fruits) #['banana', 'pear']
del fruits # 删除变量
3.修改数据:
列表可以通过下标来获取和修改元素。
fruits = ['apple', 'banana', 'pear']
print(fruits[0]) #apple
fruits[0] = 'hhh'
print(fruits) #['hhh', 'banana', 'pear']
4.查询数据:
index 用来查找元素所在的位置(下标),如果未找到则会报错
fruits = ['apple', 'banana', 'pear']
print(fruits.index('apple')) #0
print(fruits.index('ha')) #报错ValueError
count 查询元素出现次数
fruits = ['apple', 'banana', 'pear']
print(fruits .count('pear')) #1
in和not in in(存在),如果存在那么结果为true,否则为false;not in(不存在),如果不存在那么结果为true,否则false
#待查找的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#获取用户要查找的名字
findName = input('请输入要查找的姓名:')
#查找是否存在
if findName in nameList:
print('在列表中找到了相同的名字')
else:
print('没有找到')
5.排序
sort 是将list按特定顺序重新排列,
参数key:类型是一个函数,表示的是以哪种方式进行排序
参数reverse:表示是升序或者降序排序(默认值是False,表示升序排列)
a = [1, 4, 2, 3]
a.sort() # 默认从小到大排序
print(a) #[1, 2, 3, 4]
b = [1, 4, 2, 3]
b.sort(reverse=True) # 从大到小排序
print(b) #[4, 3, 2, 1]
reverse 是将list逆置
b = [1, 4, 2, 3]
b.reverse()
print(b) #[3, 2, 4, 1]
6.手动实现冒泡排序:
while循环实现:
nums = [6, 5, 3, 1, 8, 7, 2, 4]
j = 0
while j < len(nums) - 1: # 外循环用来控制趟数
i = 0
flag = True # 假设每一次都没有交换数据
# 内循环用来控制每一趟比较的次数
while i < len(nums) - 1 - j: # 每趟多比较的次数正好就是j的值
if nums[i] > nums[i + 1]:
nums[i + 1], nums[i] = nums[i], nums[i + 1]
flag = False # 说明数据交换了,假设不成立
i += 1
j += 1
if flag: # 如果这一趟走完了,flag依然是True,就说明没有数据交换,停止循环
break
print(nums)
for循环实现:
nums = [6, 5, 3, 1, 8, 7, 2, 4]
for j in range(0, len(nums) - 1):
for i in range(0, len(nums) - 1 - j):
if nums[i] > nums[i + 1]:
nums[i + 1], nums[i] = nums[i], nums[i + 1]
print(nums)
7.列表嵌套:
class1 = ['zhangsan', 'lisi', 'wangwu']
class2 = ['jerry', 'henry', 'merry']
class3 = ['tony', 'jack', 'rose']
#names是一个列表,列表里的每一个元素又是列表
names = [class1, class2, class3]
print(names[1][2]) #merry
#一个学校有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
rooms = [[], [], []]
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
for teacher in teachers:
i = random.randint(0, 2)
rooms[i].append(teacher)
print(rooms)
for i, room in enumerate(rooms): # 带下标的遍历列表
print("办公室%d有%d人,分别是:" % (i, len(room)), end='')
for teacher in room:
print(teacher, end=' ')
print()