Python容器--列表

Posted 眰恦ღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python容器--列表相关的知识,希望对你有一定的参考价值。

字符串容器中存放的元素只能是字符序列, 并且字符串容器中的元素不能修改, 如果需要存储的数据并非单一类型, 并且需要频繁修改, 我们

可以使用列表容器类型, 列表中存储的元素可以是多种数据类型, 甚至存储的数据类型都不一样, 并且列表支持对元素的修改、删除等操作.

列表也是一个序列式容器, 同样支持索引和切片语法.

# 创建空列表
my_list = []
# 创建带有元素的列表
my_list = [10, 20, 30]
# 通过索引来访问列表中元素
print(my_list[0])
# 也可以通过索引来修改元素
my_list[0] = 100
# 通过切片语法获得区间元素
print(my_list[1:])
# 列表可存储不同类型的数据
my_list = ['John', 18, True]
# 列表中也可存储列表
my_list = [[10, 20], [30, 40], [50, 60]]

列表中支持存储不同类型的数据, 如果有没有特殊需求, 建议存储相同类型数据。 这样可以对数据应用统一的操作.

遍历列表

my_list = [1, 2, 3, 4, 5]
i = 0
while i < len(my_list):
 print(my_list[i], end=' ')
 i += 1

我们也可以用 for 循环来简化列表的遍历操作.

my_list = [1, 2, 3, 4, 5]
for val in my_list:
 print(val, end=' ')

列表查找和修改

已知: 列表中包含 5 个元素, 分别为: 10、20、30、40、50. 需要将列表中 40 这个元素替换成 100, 如何实现?

  1. 列表不存在类似字符串 replace 的方法.

  2. 查询 40 这个元素在列表中的索引位置.

  3. 根据索引位置修改元素为 100.

index 方法可以根据值查找, 查找到返回该值元素所在的位置, 查找失败会报错, 程序终止. 我们可以先使用 count 方法可以统计值出现的次数, 如果不为0, 再使用 index 方法.

my_list = [10, 20, 30, 40, 50]
# 要修改的值
old_value = 40
# 更新的新值
new_value = 100
# 判断要修改的值是否存在
if my_list.count(old_value):
 # 获得指定值的位置
 position = my_list.index(old_value)
 # 根据值来修改元素
 my_list[position] = new_value
print(my_list)

如果我们只是关心值是否存在, 而并不关心出现多少次, 可以使用 in 或者 not in 运算符.

  1. in 可以判断元素是否存在, 存在返回 True

  2. not in 可以判断元素是否不存在, 不存在返回 True

以上代码可修改为:

my_list = [10, 20, 30, 40, 50]
# 要修改的值
old_value = 40
# 更新的新值
new_value = 100
# 判断要修改的值是否存在
if old_value in my_list:
 # 获得指定值的位置
 position = my_list.index(old_value)
 # 根据值来修改元素
 my_list[position] = new_value
print(my_list)

插入元素

方式一:插入单一元素可以从尾部插入,也可以指定位置插入

方式二:插入一个列表(多个元素).

append 方法, 用于向列表尾部添加元素

# 创建空列表
my_list = []
# 向列表中添加元素
my_list.append(10)
my_list.append('Obama')
# 遍历列表
for list in my_list:
 print(list)

insert 方法用于向列表指定的索引位置插入元素,

# 在指定位置插入元素
my_list.insert(1, 20)
# 输出内容
print(my_list)

extend 方法用于将另外一个列表中的所有元素追加到当前列表的尾部.

# 创建新的列表
new_list = [100, 200, 300]
# 合并两个列表
my_list.extend(new_list)
print(my_list)

删除元素

方式一:根据值删除, 使用 remove 方法. 该方法只能删除第一次出现的值.

方式二:根据索引删除, 使用 pop 方法, 该方法不传递索引时默认删除最后一个元素, 传递索引则根据索引删除元素.

my_list = [10, 20, 30, 20]
# 根据索引删除
my_list.pop(2)
print(my_list)
# 根据值删除
my_list.remove(20)
print(my_list)
# 删除所有元素
my_list.clear()
# 显示列表中还剩下多少元素
print(len(my_list))

列表元素排序

排序指的是记录按照要求排列. 排序算法在很多领域得到相当地重视.

列表提供了相关方法来对列表中的元素进行排序. 分别是:

  1. 将列表中的元反转.

  2. 列表中的元素升序(从小到大)、降序排列(从大到小).

import random

my_list = []

# 产生一个包含10个随机数的列表
i = 0
while i < 10:
 # 随机1-100产生一个数
 random_number = random.randint(1, 100)
 #追加到列表
 my_list.append(random_number)
 i += 1
 
# 打印列表中的元素
print('my_list:', my_list)
# 对列表中的反转
my_list.reverse()
# 打印列表中的元素
print('my_list:', my_list)
# 对列表中的元素排序, 默认升序
my_list.sort()
print('my_list:', my_list)
# 对列表中的元素排序, 降序排列
my_list.sort(reverse=True)
print('my_list:', my_list)

练习

一个学校, 有3个办公室, 现在有 8 位老师等待工位的分配, 请编写程序, 完成随机的分配.

思路分析如下:

  1. 待分配的 8 位老师需要存储, 我们可以用列表来暂时存储 8 位老师.

  2. 一个学校中包含了多个办公室, 学校可用列表来表示, 学校中又包含了多个办公室, 每个办公室里可能有多个老师, 办公室仍然可用列表来表示.

  3. 从待分配老师列表中取出数据, 随机产生办公室编号, 将该老师分配到该办公室.

  4. 打印各个办公室中的老师列表

import random

# 定义一个列表用来存储8位老师的名字
teacher_list = []
i = 0
while i < 8:
  teacher_name = '老师' + str(i + 1)
  teacher_list.append(teacher_name)
  i += 1
# 定义学校并包含3个办公室
school = [[], [], []]
# 获取每个老师并随机分配办公室
for teacher in teacher_list:
  office_nunmber = random.randint(0, 2)
  school[office_nunmber].append(teacher)
 # 打印各个办公室的老师列表
for office in school:
  for teacher in office:
   print("%s" % teacher, end=' ')
  print('\\n' + '*' * 20)

以上是关于Python容器--列表的主要内容,如果未能解决你的问题,请参考以下文章

python中列表的升序

python 按升序对列表(或元组列表)进行排序

如何使用python划分列表并按升序和降序排序?

Python3基础 extend向列表尾部插入多个元素

python生成20个随机数列表,前10个升序后10个降序

Python学习之路:通过分片的方式修改列表的技巧(拓展知识)