python基本程序设计_Python编程基础5——列表

1.课前阅读

1.1学习目标了解列表是什么

了解列表与变量的区别与联系

学习有关列表的基本操作

了解排序算法

学会冒泡排序算法

1.2实践内容

①学习Python语言中有关列表的基本操作,包括创建列表,插入、删除、查询列表内的数据。

②学习冒泡排序算法,对列表数据进行排序,解决排队问题。

1.3情境引入

在我们生活的这个世界中到处都是被排序过的东西。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……

总之很多东西都需要排序,可以说排序是无处不在。那你知道这些排序在计算中是如何实现的吗?

2.解决简单的问题

2.1问题描述

在一个队伍中要将成员按照身高从低到高排序。我们先简化这个问题,这个队伍中只有四个身高不同的成员。

接下来将身高进行从小到大排序。你有没有什么好方法编写一段程序,让计算机随机读入4个数然后将这4个数从小到大输出?

2.2思路引导

这个问题只分为3步:

第一步,将队伍身高信息依次录入计算机内,也就是写进程序中。

第二步,执行我们编写的程序。

第三步,按照输出的顺序,排一下顺序,验证一下是否结果是正确的。

相信大家已经看出来了,这三步中,最重要也是最难的就是第二步,其实第二步的关键就是使用Python语言写出一个排序算法。排序算法也有很多,各自的优缺点不一,其中比较好理解的是冒泡排序。

3.理论知识基础

3.1列表是什么

其实理解起来,列表就相当于一个记录数据的笔记本,因为笔记本有的列表都有相对应的部分。比如这本笔记本是用来记录什么内容的,需要在封面上标注。笔记本每一页的页码,同样列表也有对应着内存位置的检索,可以通过这个检索查看与删除内存中存储的数据。

3.2变量与列表的区别

我们之前的课程内容中,学习了变量,作为同样是记录数据作用,那么变量与列表有什么区别呢?

其实我们对应小便笺与笔记本的区别就可以发现,小便笺随手可以记录,方便使用。对于一些零碎的想法。而对于一些相互之间关系紧密的系统的数据量大信息,比如一学期的课堂笔记,适合使用笔记本记录。这同样也是变量与列表的区别。

3.3列表的基本操作

3.3.1创建一个列表

列表的创建比较简单,首先输入列表名,然后列表名后面跟一个“=”这与我们创建一个变量完全一样。后面我们需要使用“[”“]”将数据框起来,并且数据与数据之间使用“,”,进行分隔开。

chinese = ['一','二','三','四','五']

english = ['one','two','three','four','five']

math = [1,2,3,4,5]

字符型数据可能需要使用单引号‘’或是双引号“”包裹起来,而数字就不需要。

3.3.2查看列表的数据

math = [1,2,3,4,5]

print(math)

对于创建成功的列表,可以使用print()函数来查看一下。

3.3.3为列表添加数据

math.append("六")#在列表后面添加元素

print(math)

math.insert(1,'九')#在列表某位置添加元素

print(math)

math.extend(['七','八'])#在列表后面添加列表

print(math)

这些基本操作都比较好理解,动手编程尝试一下就可以。

3.3.4在列表里删除数据

math.remove('九')#在列表内删除某个元素

print(math)

del math[0]#在列表内删除某个位置元素

print(math)

math.pop()#在列表后面删除元素

print(math)

这些基本操作与添加一样,都比较好理解,动手编程尝试一下就可以。

3.3.5在列表里搜索数据

我们看一本书,哪一部分内容究竟有没有,有又在哪一页到哪一页?有目录还是会很好。列表里都有哪些数据,它们都位于什么位置?这时从列表中搜索数据这一操作就很重要。

math.index(3)

点“·”前面的是要搜索的列表名称,而后面的index是指令,括号“()”里的是我们需要在列表中搜索的数据。

math = [1,2,3,4,5]

print(math.index(3))#查找列表内某个元素的位置

if 3 in math:

print(math.index(3))#查找列表内某个元素的位置

else:

print('没这个数据!')

注意:如果我们直接搜索,需要保证列表里一定有我们需要搜索的数据,否则会报错。如果需要搜索一个不确定列表中是否有的数据,需要进行一个判断。

3.3.6在列表里交换数据

列表中第几项与第几项通过“,”隔开。然后“=”列表的元素交换,此时列表中的两个元素就被交换过来了。

math = [1,2,3,4,5]

print(math)

math[0], math[1] = math[1], math[0]

print(math)

3.3冒泡排序

3.3.1一种排序方法

首先从队伍的最左端与靠近的进行对比,如果左侧高于右侧,就交换位置。然后换下一位与右侧进行对比,依次类推。

经过这一轮对比后,整个队伍中最高的一定位于队伍最后。

然后,经过一轮对比后,最左侧的人已经换一个,再重复上述对比过程。

经过这一轮对比后,整个队伍中第二高的人也排好了位置。

经过这轮对比后,最左侧的人已经换一个,再重复上述对比过程。

此时整个队伍已经按照身高,从低到高排好。

每次都是比较相邻的两个数,如果后面的数比前面的数大,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。

就如同是一个气泡,一步一步往后“翻滚”,直到最后一位。所以这个排序的方法有一个很好听的名字“冒泡排序”。

3.3.2冒泡排序的关键

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。

其中循环、判断、交换是最为关键。

在循环章节我们学习到,任何重复的动作,都可以使用循环语句来进行精简。那么每次比较两个相邻元素这个操作就可以使用循环来进行。

arr = [180, 165, 160, 179]

n = len(arr)

print(n)

print(arr[0],arr[1],arr[2],arr[3])#列表中四个人的身高

for j in range(n-1):

print("第%d次内循环" % j)

运行结果:

判断与交换,如果左侧大于右侧的数据,就将两个数据进行交换。

arr = [180, 165, 160, 179]

n = len(arr)

print(n)

print(arr[0],arr[1],arr[2],arr[3])

for j in range(n-1):

print("第%d次内循环" % j)

if arr[j]>arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]#交换两个位置的数据

print(arr)

运行结果:

目前为止我们只完成了一次循环,找到了最大的一个数据,并且将其交换到了最右侧。我们还需要进行两次这样的循环,使整个顺序都是从要到大的。

arr = [178, 165, 160, 180]

print(arr)

n = len(arr)

print(n)

print(arr[0],arr[1],arr[2],arr[3])

for i in range(n-1):

for j in range(n-1):

print("这是第%d次外循环,第%d次内循环" % (i,j))

if arr[j]>arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]#交换两个位置的数据

print(arr)

运行结果:

4.课后练习

观察颜色突出的参考答案代码,尝试说说这段代码对于整个项目是什么作用?

4.1参考答案

arr = [178, 165, 160, 180]#初始的无序数据

arr2 = [178, 165, 160, 180]#备份初始位置

print(arr)

n = len(arr)

for i in range(n):#外循环

for j in range(0, n-i-1):#内循环

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]#交换两个位置的数据

#输出排序后的位置

print(arr)

for i in range(n):

print(arr2.index(arr[i])+1)

4.2运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值