Python for Kids
  • 0 前言
  • 1 编程环境准备
  • 2 运算符和表达式
  • 3 掌握变量
  • 4 字符串
  • 5 获取用户的输入
  • 6 条件判断
  • 7 条件判断实操
  • 8 FOR循环
  • 9 循环和列表
  • 10 WHILE循环
  • 11 WHILE循环实操
  • 12 WHILE循环再实操
  • 13 多重循环
  • 14 再谈列表
  • 15 初见函数
  • 16 函数实操
  • 17 选择排序
  • 18 冒泡排序
  • 19 递归算法之一
  • 20 递归算法实操
  • 21 快速排序
  • 22 汉诺塔游戏
  • 23 递推算法
  • 24 分治算法
  • 25 集合与组合
  • 26 贪心算法
  • 27 字典和键值对
  • 28 广度优先搜索算法
  • 29 数组和向量化计算
  • 30 随机和模拟
  • 31 数据可视化
  • 32 文件读取和分析
Powered by GitBook
On this page
  • 大纲
  • 列表的更多操作
  • 列表解析
  • 列表和字符串的相互转换
  • 列表的嵌套
  • 练习:数字移位
  • 练习:苹果编号

Was this helpful?

14 再谈列表

掌握列表非常重要哦

大纲

  • 列表的更多操作

  • 列表解析

  • 列表和字符串的相互转换

  • 列表的嵌套

  • 练习:数字移位

  • 练习:苹果编号

列表的更多操作

前一课我们学习了列表的操作,列表可以用于处理一大串数字,在python编程中用处非常广泛。其实列表中的元素不仅可以用来保存数值,还可以用来保存字符串。例如我们可以用列表来定义学校中一天的课程。要注意在定义这个中文字符串构成的列表时,除了汉字本身以外的所有标点符号都需要是英文格式。

course = ['语文','数学','英语','历史','体育','音乐']
print(course)
['语文', '数学', '英语', '历史', '体育', '音乐']

一个经常用的函数是len,用于计算列表的长度,也就是列表中有多少个元素。

len(course)
6

这个字符串元素构成的列表和数值构成的列表一样,可以做选择、新增和修改的操作。

course[0]  #选择第一门课
'语文'
course[1] = '语文'  #将第二门数学课修改为语文

如果想判断某个列表中是否包括某个元素,可以通过in来判断条件。

'自习' in course
False
course.append('自习') #增加一个自习课
'自习' in course
True

做修改后课程就变成下面的样子了。

print(course)
['语文', '语文', '英语', '历史', '体育', '音乐', '自习']

如果是想删除列表中的某个元素,有两种方法,一种是使用del,另一种是使用pop

del course[0]

del命令可用于删除列表中任一个位置的元素。上例中是删除了第一个。

course.pop()
'自习'

pop则是默认删除列表中最后一个位置中的元素,同时将这个元素返回出来。

course
['语文', '英语', '历史', '体育', '音乐']

列表还可以通过加号进行拼接

['语文', '英语', '历史'] + ['体育', '音乐']
['语文', '英语', '历史', '体育', '音乐']

选择列表中的元素的时候,不仅可以选择某个元素,还可以选择某一些元素,例如我们选出上午四门课。

course = ['语文','数学','英语','历史','体育','音乐','自习']
course[0:4]
['语文', '数学', '英语', '历史']

方括号内不再是某一个数字编号,而是一个起始编号加冒号加结束编号,也就是从0号位置到4号位置之前的元素都选择出来,注意4号位置并不选出。如果起始编号是从0号开始的,这个起始编号可以省略不写,如下例一样。

course[:4]
['语文', '数学', '英语', '历史']

然后我们再把下午的三门课选出来,编号就是从4号位置开始,一直到最后,这个结束编号可以省略不写。

course[4:]
['体育', '音乐', '自习']

我们也可以从后面往前选择,从倒数第三门课开始选择,和上面的结果是一样的

course[-3:]
['体育', '音乐', '自习']

列表解析

上一课我们见到了,可以通过循环来处理列表中的每一个元素,例如找到20以内的偶数。

numbers_even = []
for x in range(20):
    if  x%2==0:
        numbers_even.append(x)
print(numbers_even)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

有一种更简洁的循环写法,称为列表解析,列表解析的写法和循环非常相似,其中for...in的关键词用法完全一样,不过是写在一行内,之后可以增加if条件进行过滤筛选,将需要的x写在最前面,最后是用一对方括号放在两边,这样整体的输出是一个列表。

[x for x in range(20) if x%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

同样,让我们用列表解析来处理字符串列表,例如把这天课程中不包括“自习”的课程选择出来。在这里使用了一个新的比较操作符,!=就是不等的意思。

[x for x in course if x!='自习']
['语文', '数学', '英语', '历史', '体育', '音乐']

选择出这天课程中不包括自习和音乐的课程出来,in是用来判断x是否在某个列表中,如果不在自习、音乐课的列表中的课程会被筛选出来

[x for x in course if x not in ['自习','音乐']]
['语文', '数学', '英语', '历史', '体育']

列表和字符串的相互转换

列表可以整合成一个大的字符串,一个大的字符串也可以分拆成一个列表,让我们看一个例子。

cource_str = '_'.join(course)
print(cource_str)
type(cource_str)
语文_数学_英语_历史_体育_音乐_自习

str

列表通过一个下划线符号进行连接,整体成为一个字符串,下例再逆反回去,用split函数,再将这个大的字符串分拆成一个列表。

cource_str.split('_')
['语文', '数学', '英语', '历史', '体育', '音乐', '自习']

列表的嵌套

列表不仅可以保存数值和字符串,它还可以保存列表,也就是说列表的元素也可以是列表。这种称之为嵌套列表。下例我们用一个列表来表示各门课程以及对应的成绩分数。其中每个元素都是一个有两个元素的小列表,小列表中第一个位置是存放课程,第二个位置是存放分数。

course = [['语文',85],['数学',90],['英语',94],['历史',87],['体育',85],['音乐',98]]

让我们选择出分数大于90分的课程,使用列表解析就非常方便,遍历列表,其中课程的分数放在第二个位置,所以用c[1]表示,如果分数大于90,就输出c[0],就是课程的名字

[c[0] for c in course if c[1]>90]
['英语', '音乐']

再来计算下这几门课的平均分数,先用来个列表解析将所有的分数取出,再循环遍历所有的分数,将分数累加,再用这个累加的分数去除以课程的个数,最后用round四舍五入一下,得到平均分。

score = [c[1] for c in course]
sum_score = 0
for s in score:
    sum_score = sum_score + s

avg_score = round(sum_score/len(score),1)
print(avg_score)
89.8

练习:数字移位

一个列表中由1-5这五个数字元素填充,将它们进行循环移位,[1,2,3,4,5] 变成 [2,3,4,5,1]

x = [1,2,3,4,5]
temp = x[0]
for i in range(len(x)-1):
    x[i]=x[i+1]
x[-1] = temp
print(x)
[5, 1, 2, 3, 4]

练习:苹果编号

30个苹果排成一个圆圈,每个苹果上进行顺序编号,从0到29,从0开始数,每数7个苹果则将这个苹果取出来放到一边去。拿走一半的苹果后停止,问剩下的苹果,编号是哪些?

# a列表表示哪个位置上被取出为1,未取到为0
a = []
for i in range(30):
    a.append(0)

num = 0  # num为一共取出个数
i = 0 # i表示位置
k = 0 # k表示每K个取出
while num<15:
    if i>29:  # 队尾数字从头开始
        i = 0
    if a[i]==0: # 此位置上未取出,则计数K
        k = k+1
    if k==9:  # 数到第K则取出
        a[i]=1
        k=0
        num = num+1
    i = i+1
for i in range(30):
    if a[i] ==0:
        print(i,end=" ")
0 1 2 3 9 10 12 13 14 16 19 20 24 27 28 
Previous13 多重循环Next15 初见函数

Last updated 4 years ago

Was this helpful?