列表
文章目录
一、列表
1、列表的介绍
列表时Python中最基本也是最常用的数据结构之一,它时一个有序可重复的元素集合。从数据结构角度来看,Python的列表时一个可变长度的顺序储存结构,每一个位置存放的都是对象的指针。
我们可以对列表进行修改、切片、追加、删除、嵌套、成员判断等操作。
2、列表创建
创建一个列表,只要把逗号分隔的不同的数据元素使用方括号括起来即可。
li_1 = ['zhangsan', 'lisi', 2, True,2] #创建:英文状态下的一对方括号
print(li_1) # ['zhangsan', 'lisi', 2, True, 2] 元素可以是任意类型的,元素可以重复
print(type(li_1)) # <class 'list'>
print(list("abc")) # ['a', 'b', 'c'] 可以将元素逐个取出
print(list("123")) # ['1', '2', '3']
print(list(123)) # TypeError: 'int' object is not iterable 整数不可以拆分
注意:
①变量名最好不使用list
②列表里的元素可以是任意类型
③iterable 表示可迭代的对象,简单来说就是可以把元素一个一个取出来。
3、访问(查)列表内的元素
列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一。要访问它的某个元素,以方括号加下标值的方式即可。
li = [1, 2]
print(li[0]) # 1
print(li[1]) # 2
print(li[2]) # 超出索引范围报错: IndexError: list index out of range
注意:
①要确保索引不越界,一旦访问的索引超过范围,会抛出异常,所以,一定要记得最后一个元素的索引是len(list)-1.
4、修改列表内的元素
直接取出元素进行重新赋值
li = list("abc")
li[0] = 'A' # 将‘A’赋值给‘a’
print(li) # ['A', 'b', 'c']
5、删除列表内的元素
直接取出元素,再通过del语句或者list.remove()或者list.pop()删除。
li = list("12345678")
del li[0] # 利用del语句将索引为0的元素删除
print(li) # ['2', '3', '4', '5', '6', '7', '8']
# del li
# print(li) # NameError: name 'li' is not defined将整个列表删除,访问不到
li.remove("2") # 括号中填入需要删除的元素
print(li) # ['3', '4', '5', '6', '7', '8']
li.pop() # 默认删除最后一个索引位置的元素
print(li) # ['3', '4', '5', '6', '7']
li.pop(1) # 将索引1上的元素删除
print(li) # ['3', '5', '6', '7']
6、列表的特殊操作
列表相加
列表展开
成员判断
迭代
'''
列表相加
'''
li_1 = [1, 2, 3]
li_2 = [4, 5, 6]
print(li_1 + li_2) # [1, 2, 3, 4, 5, 6]
print(li_1*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(2 in li_1) # True 用成员运算符in / not in 来判断元素是否在列表内,返回bool值
print(4 not in li_2) # False
'''
迭代
'''
li = [1, 2, 3]
for i in li:
print(i) # 将1 2 3 隔行分开
注意:
①列表与列表不能相乘,不能相减。
7、常用内置函数
len()
max()
min()
print(type(len)) # <class 'builtin_function_or_method'>
print(type(max)) # <class 'builtin_function_or_method'>
print(type(min)) # <class 'builtin_function_or_method'>
'''
len()-->返回长度
'''
li = list('abc')
print(len(li)) # 3
'''
max()取列表中最大的元素
'''
li_1 = list('abc')
print(max(li_1)) # c 比较的是ascⅡ码
li_2 = [1, 2, 'b']
print(max(li_2) # int与str不能直接比较 报错:SyntaxError: unexpected EOF while parsing
'''
min()去取列表中最小的元素,与max()用法一样
'''
li_3 = list('123456')
print(min(li_3)) # 1
8、排序与反转
逆序取出
li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30]
print(li[::-1]) # [30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
li.reverse()
print(li) # [30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
列表排序
'''排序'''
li_2 = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
li_2.sort() # L.sort()默认升序
print(li_2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
li_2.sort(reverse=True) # L.sort(reverse=True) 降序
print(li_2) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
9、切片
slice(start,stop[,step])
start: 起始位置默认为0
stop:结束位置默认最后一个元素
step:可选参数:步长,默认为1
li = list('1234567')
print(li[1:4:]) # ['2', '3', '4']切片为左闭右开,所以要取到索引3的元素,需要写入索引4
print(li[::-1]) # 步长为-1可实现逆序 ['7', '6', '5', '4', '3', '2', '1']
print(li[1:6:2]) # ['2', '4', '6']
li_2= [1, 2, 3, ['Tom', 4]] #想取出'Tom'
print(li_2[3][0]) # Tom
10、列表的常用函数
L.append(object) -->在列表末尾添加新的对象
L.count(object)–>统计某个元素在列表中出现的次数
L.extend()–>用新列表扩展原来的列表
L.index(value)–>从列表中找出某个值第一个匹配项的索引位置
L.insert(index, object)–>将对象插入列表
L.clear()–>清空列表
L.copy()–>复制列表
li = list('abcd')
li.append('e') # L.append(object) -->在列表末尾添加新的对象
print(li) # ['a', 'b', 'c', 'd', 'e']
print(li.count('e')) # 1 L.count(object)-->统计某个元素在列表中出现的次数
li.extend([1,2,3]) # L.extend()-->用新列表扩展原来的列表
print(li) # ['a', 'b', 'c', 'd', 'e', 1, 2, 3]
print(li.index(1)) # 5 L.index(value)-->从列表中找出某个值第一个匹配项的索引位置
li.insert(5, '0') # L.insert(index, object)-->将对象插入列表
print(li) # ['a', 'b', 'c', 'd', 'e', '0', 1, 2, 3]
li.clear() # L.clear()-->清空列表
print(li) # []
二、for 循环和 range函数
1、for循环
- 通过for循环来遍历列表
语法
for 变量 in 序列(遍历的规则):
代码块
- 注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
2、range函数
- range(start, stop[, step])
参数说明- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
三、作业
1、多种方法实现a = [1, 2, 3, 4, 5, 6]–>[6, 5, 4, 3, 2, 1]
# a = [1, 2, 3, 4, 5, 6]-->[6, 5, 4, 3, 2, 1]
# 方法一
a = [1, 2, 3, 4, 5, 6]
li = []
while a != []:
li.append(max(a))
a.remove(max(a))
print(li) # [6, 5, 4, 3, 2, 1]
# 方法二
a = [1, 2, 3, 4, 5, 6]
print(a[::-1]) # [6, 5, 4, 3, 2, 1]
# 方法三
a = [1, 2, 3, 4, 5, 6]
a.sort(reverse=True)
print(a) # [6, 5, 4, 3, 2, 1]
2、给用户9次机会,猜1-10的数字,要求用户猜对的几率为0
# 用户猜数字1-10,9次机会,猜对几率为0
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(1, 10):
client_guess = int(input(f'请猜数字1-10,您还有{10-i}次机会:'))
num.remove(client_guess)
print('抱歉,猜错了!')
print(f'对不起!您的次数已经用完,正确的数字为:{num[0]}')
3、有两个列表li1=[11, 22, 33],li2=[22, 33, 44],获取它们中相同的元素
# 有两个列表li1=[11, 22, 33],li2=[22, 33, 44],获取它们中相同的元素
li1 = [11, 22, 33]
li2 = [22, 33, 44]
for i in range(3):
if li1[i] in li2:
print(li1[i], end=' ')
4、将8位老师随机分配到3个办公室中
# 8个老师随机分配到3个教室中
import random
teachers = ['t1', 't2', 't3', 't4', 't5', 't6', 't7', 't8']
first_room = []
second_room = []
third_room = []
for i in range(0, 8):
a = random.randint(0, len(teachers) - 1)
random.choice([first_room, second_room, third_room]).append(teachers[a])
teachers.remove(teachers[a])
print(f'第一个教室的老师有:{first_room}\n第二个教室的老师有:{second_room}\n第三个教室的老师有:{third_room}')