Python基础语法小结2(列表)
1. 序列(sequence)
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
2. 列表
2.1 列表的创建
-
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
-
列表的数据项不需要具有相同的类型
-
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
lst1 = [] #创建一个空的列表 lst2 = ['Python', 'Java', 'R', 'SPSS'] # 字符串列表 lst3 = [1, 2, 3, 4, 5] # 整型列表 lst4 = [1, 'Python', 2, 'Java', 'R', 3] # 混合数据类型的列表 # 使用print方法输出列表 print(lst1) print(lst2) print(lst3) print(lst4)
2.2 访问列表中的项
列表中的每一项都有其位置索引,从列表左侧进行编号的话是从 0 开始的,从右边进行编号的话,是从 -1 开始的。我们可以使用 list_name[index] 的方式来访问列表中某一项的值
lang = ['Python', 'C#', 'R', 'Java', 'PHP']
s = lang[0] # 索引为0的项
print(s)
print(lang[2]) # 索引为2的项
s1 = lang[-1] # 访问最后一项
print(s1)
2.3 修改列表中的值
列表定义完后,如修改里面某项的值,可以使用 list_name[index] = newvalue 的形式来完成
like_fruits = ['apple', 'pear', 'banana', 'orange']
print(f'更新前的值:{like_fruits}')
like_fruits[1] = 'berry' # 修改索引为1处的值
print(f'更新前的值:{like_fruits}')
like_fruits[-1] = 'mango' # 修改索引为-1处(最后一个)的值
print(f'更新末尾的值:{like_fruits}')
输出:
更新前的值:['apple', 'pear', 'banana', 'orange']
更新前的值:['apple', 'berry', 'banana', 'orange']
更新末尾的值:['apple', 'berry', 'banana', 'mango']
2.4 删除列表中的一项
# 定义一个颜色列表
list_colors = ['Red', 'Blue', 'Black', 'White', 'Pink', 'Green', 'Gray']
print('原列表:', list_colors)
# 使用 remove 删除指定值的列表项
list_colors.remove('Green')
print('使用remove删除\'Green\'后:', list_colors)
# 使用 del 删除指定索引处的列表项
del list_colors[2]
print('使用del删除索引2处的项后:', list_colors)
# 使用pop方法移除指定索引处的项
list_colors.pop(3)
print('使用pop方法删除索引3处的项后:', list_colors)
输出:
原列表: ['Red', 'Blue', 'Black', 'White', 'Pink', 'Green', 'Gray']
使用remove删除'Green'后: ['Red', 'Blue', 'Black', 'White', 'Pink', 'Gray']
使用del删除索引2处的项后: ['Red', 'Blue', 'White', 'Pink', 'Gray']
使用pop方法删除索引3处的项后: ['Red', 'Blue', 'White', 'Gray']
注意上面使用Remove方法来删除列表中的项时,只能使用具体的值来删除,不能使用索引,并且要删除的值必须在列表中存在,否则会报错。使用pop时只能使用索引,不能使用值来删除。
Python中的 del 不仅能删除列表中的某一项,还能将整个列表进行删除
2.5 嵌套列表
列表中又包含列表,称之为嵌套列表。/作业4中有体现/
3. 作业
3.1 作业1
题目:现在有 a = [1,2,3,4,5,6] 用多种方式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
a = [1, 2, 3, 4, 5, 6]
print(a[::-1]) # 第一种方法
print(a[-1::-1]) # 第二种方法
new_a = [] # 第三种方法,使用pop()方法先取列表中最后一个元素传递给新列表
for i in range(len(a)):
b = a.pop()
new_a.append(b)
print(new_a)
a.reverse() # 第四种方法,使用reverse()方法,永久性反转
print(a)
new_b = [] # 第五种方法,使用insert()方法,把原列表元素在新列表中依次传递进去,得到的新列表就为倒序
for i in a:
new_b.insert(0, i)
print(new_b)
b = list(reversed(a)) # 第六种方法,使用reversed()方法,临时性反转列表
print(b)
c = list(sorted(a, reverse=True)) # 第七种方法,使用sorted()方法,使用参数reverse,临时性反转
print(c)
3.2 作业2
题目:给用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,
如果不一致则表示错误。最终结果要求用户怎么也猜不对
import random
i = 1
print("您一共有9次机会猜数字")
while i < 10:
computer = random.randint(1, 10)
player = int(input("请输入1~10之间的数字来猜数字:"))
if player == computer:
print(f'电脑是{computer + 1}')
print(f"您没猜中,还有{9-i}次机会")
i += 1
else:
print(f'电脑是{computer}')
print(f"您没猜中,还有{9-i}次机会")
i += 1
3.3 作业3
题目:有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
lst_same = []
for i in lst1:
for j in lst2:
if j == i:
lst_same.append(j)
print(lst_same)
3.4 作业4
题目:现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
import random
teacher = ['张', '王', '李', '赵', '宋', '欧阳', '吴', '郭']
offices = [[], [], []] # 建立一个办公室二维空列表
for i in teacher: # 对offices列表内每一个内列表随机传递元素
offices[random.randint(0, 2)].append(i) # 每一次循环teacher列表元素不一定传入offices[0]或offices[1]或offices[2]中
print(offices)
输出:列举了6次结果
[['张', '李'], ['赵', '欧阳'], ['王', '宋', '吴', '郭']]
[['李', '欧阳', '吴'], ['张', '宋'], ['王', '赵', '郭']]
[['张', '王', '李', '赵', '欧阳', '吴'], [], ['宋', '郭']]
[[], ['王', '欧阳', '吴'], ['张', '李', '赵', '宋', '郭']]
[['张', '宋', '吴'], ['赵', '欧阳'], ['王', '李', '郭']]
[['宋', '欧阳'], ['李', '赵'], ['张', '王', '吴', '郭']]