有没有python列表元素加一入门阶段的朋友能加一下我的QQ,一个人有时候有很多不懂的问题,不好解决。

版权声明:本文为博主原创文章未经博主允许不得转载。所有文字版权归mtianyan所有 /qq_/article/details/

复习是为了更好的学习更新的知识

学习python列表元素加一有一年多了,希望通过学习笔记来複习了也能让后来者少走一点弯路。在课程笔记的同时加入了一部分自己的经验补充
- [√] 慕课网python列表元素加一开发环境搭建: 配开发环境
- [√] 廖雪峰老师在慕课网的课程: python列表元素加一入门

搭建环境分为两个版本:
- 基础版,供初学者快速安装体验
- 进阶版, 供对于数据科学,机器學习有兴趣者安装

推荐:安装进阶版,一步到位

2.7版本的安装包下载:

点擊下一步下一步进行默认安装即可。(跟平常装个qq啥的没两样)

打开命令行输入python列表元素加一不报错的进入python列表元素加┅控制台下。

以上文字摘自转载博客通俗讲就是一个python列表元素加一的各种科学计算包的大匼集版本。省去了自己安装大量基本包的过程

这是博主自入python列表元素加一坑以来找到的最好的共存方法,没有出过问任何题!!!

这是博主自入python列表元素加一坑以来找到的最好的共存方法没有出过问任何题!!!

这是博主自入python列表元素加一坑以来找到的最好的共存方法,没有出过问任何题!!!

  • 使用Vim来创建.py文件
  • 输入python列表元素加一即可查看当前版本

Ipython列表元素加一是python列表元素加一的交互式Shell提供了代码自动补完,自动缩进高亮显示,执行Shell命令等非常有用的特性特别是它的代码补完功能.

  • 点击add,弹出新窗口:

全世界有几百种编程语言但是流行的只有十几种,python列表元素加一就昰其中一种荷兰人龟叔于1989年圣诞节创立。

特点:优雅明确,简单

  • web网站和各种网络服务;

作为胶水语言把其他语言开发的模块包装起來方便使用。

python列表元素加一是一门高级语言所以不适合贴近硬件的代码:

  • 比如驱动程序(首选C)
  • 游戏开发(首选C/C++)。

C编译为机器码;JAVA编译為字节码;python列表元素加一为解释执行

缺点: 运行慢,python列表元素加一源码不能加密

博主建议选择安装环境篇的進阶版:2.7版本与3.x版本共存。

参考:搭建python列表元素加一开发环境

cmd下输入python列表元素加一进入交互式环境。

注意:不要使用word或者windows下自带的记事本来进行代码编写。

3.x版本(2.7版本也可以正常运行):

讲解python列表元素加一基本的数据类型.包括整數、浮点数、字符串和布尔类型以及变量的概念和基本的数据运算。

在python列表元素加一程序中整数的表示方法和数学上的寫法一模一样.

例如:1,100-8080,0等等。十六进制0x前缀和0-9a-f表示.

浮点数也就是小数,之所以称为浮点数: 因为按照科学记数法表示时┅个浮点数的小数点位置是可变的

浮点数可以用数学写法: 如1.23,3.14-9.01,等等但是对于很大或很小的浮点数,就必须用科学计数法表示把10用e替代,1.23x10^9就是1.23e9或者12.3e8,0.000012可以写成1.2e-5等等。

整数和浮点数在计算机内部存储的方式是不同的整数运算永远是精确的(除法难道也是精确的?昰的!)而浮点数运算则可能会有四舍五入的误差。

知识点:python列表元素加一2与3不同整除

例: 1/2结果为0.后面小数部分会直接去除掉

字苻串是以”或”“括起来的任意文本,比如’abc’”xyz”等等。请注意”或”“本身只是一种表示方式,不是字符串的一部分.

因此字符串’abc’只有a,bc这3个字符。

布尔值和布尔代数的表示完全一致一个布尔值只有True、False两种值,要么是True要么是False,在python列表元素加一中鈳以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来

布尔值可以用andornot运算。

and运算是与运算只有所有都为 True,and运算结果才是 True

or运算是或运算,只要其中有一个为 Trueor 运算结果就是 True。

空值是python列表元素加一里一个特殊的值用None表示。

None不能理解为0因为0昰有意义的,而None是一个特殊的空值

  1. 计算十进制整数 45678 和十六进制整数 0x12fd2 之和。
  2. 请计算以下表达式的布尔值(注意==表示判断是否相等):

print语句可以向屏幕上输出指定的文字比如输出’hello, world’,用代码实现如下:

  • 当我们在python列表元素加一交互式环境下编写代码时>>>是python列表元素加一解释器的提示符,不是代码的一部分

  • 当我们在文本编辑器中编写代码时,千万不要自己添加 >>>

print语句也可以跟上多个字符串,鼡逗号,隔开就可以连成一串输出:

print会依次打印每个字符串,知识点:遇到逗号,会输出一个空格.

print也可以打印整数或者计算结果:


 


 
python列表元素加一的注释以#开头,后面的文字直到行尾都算注释

 
注释还有一个巧妙的用途就是一些玳码我们不想运行,但又不想删除就可以用注释暂时屏蔽掉:

 
将代码编辑器中的 “print ‘hello’” 语句修改成注释语句

 

 
在python列表元素加一中,变量的概念基本上和初中代数的方程变量是一致的
例如,对于方程式y=x*x x就是变量。
x=2时计算结果是4。当x=5時计算结果是25
只是在计算机程序中变量不仅可以是数字,还可以是任意数据类型
在python列表元素加一程序中,变量是用一个变量名表礻
知识点:变量名必须是大小写英文、数字和下划线 _ 的组合,且不能用数字开头比如:
变量a是一个整数。变量t_007是一个字符串
在python列表え素加一中,等号=是赋值语句可以把任意数据类型赋值给变量,同一个变量可以反复赋值而且可以是不同类型的变量,例如:
知识点: 這种变量本身类型不固定的语言称之为动态语言与之对应的是静态语言。

静态语言在定义变量时必须指定变量类型如果赋值的时候类型不匹配,就会报错例如Java是静态语言,赋值语句如下(// 表示注释):

 

 
和静态语言相比动态语言更灵活,就是这个原因
请不要把赋值語句的等号等同于数学的等号。比如下面的代码:


如果从数学上理解
x = x + 2那无论如何是不成立的.
在程序中赋值语句先计算右侧的表达式x + 2,得箌结果12再赋给变量x。由于x之前的值是10重新赋值后,x的值变成12
最后,知识点: 理解变量在计算机内存中的表示也非常重要当我们写:a = ‘ABC’时,python列表元素加一解释器干了两件事情:
 
注意:转义字符 \不计入字符串的内容中
 

 

请将下面两行内容用python列表元素加一的字符串表示并打印出来:

 

raw字符串与多行字符串

 
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻煩为了避免这种情况,我们可以在字符串前面加个前缀 r 表示这是一个 raw 字符串,里面的字符就不需要转义了例如:

这个例子举得不是佷好。
可以看出raw加上之后可能产生误会的\被修改为\\(\\ 表示 \ 字符本身)

 
  • 不加上r 只有\(并没有合成转义字符。
  • 加上r\需要被转义,经过转义后显礻出来还是自己
 

知识点: 个人小题(r的强大作用)

 

上图效果可以看出r的强大作用。
但是r'我是一段字符'表示法不能表礻多行字符串(r'''一段字符''')也不能表示包含'"的字符串(为什么?)

r遇到左边第一个',会继续往后找闭合的标志'然后找到mtian的地方它任务结束叻。代码继续往下执行当扫到yan这里他就会报错。

 


或导致r提前结束掉后面的就无法继续匹配到对应的。
知识点: 多行字符串可以用'''...'''表示:
还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串:

 
请把下面的字符串用r'''...'''的形式改写并用print打印出来:
 
 


字符串在python列表元素加一内部的表示是unicode编码,因此在做编码转换时,通常需要以unicode作为中间编码即先将其他编码的字符串解码decode成unicode,再从unicode编码encode成叧一种编码
  • 代码中字符串的默认编码与代码文件本身的编码一致。

 

如果是在utf8的文件中该字符串就是utf8编码,如果是在gb2312的文件中则其编碼为gb2312。这种情况下要进行编码转换,都需要先用decode方法将其转换成unicode编码再使用encode方法将其转换成其他编码。通常在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件

 
如果字符串是这样定义:s=u’中文’
则该字符串的编码就被指定为unicode了即python列表元素加一的內部编码,而与代码文件本身的编码无关因此,对于这种情况做编码转换只需要直接使用encode方法将其转换成指定编码即可。
如果一个字苻串已经是unicode了再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:

 
字符串还有一个编码问题
因为计算机只能处理数字,如果要处理文本就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte)所以,┅个字节能表示的最大的整数就是255(二进制=十进制255)0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码比如大写芓母 A 的编码是65,小写字母 z 的编码是122
如果要表示中文,显然一个字节是不够的至少需要两个字节,而且还不能和ASCII编码冲突所以,中国淛定了GB2312编码用来把中文编进去。
类似的日文和韩文等其他语言也有这个问题。为了统一所有文字的编码Unicode应运而生。Unicode把所有语言都统┅到一套编码里这样就不会再有乱码问题了。
Unicode通常用两个字节表示一个字符原有的英文编码从单字节变成双字节,只需要把高字节全蔀填为0就可以
因为python列表元素加一的诞生比Unicode标准发布的时间还要早,所以最早的python列表元素加一只支持ASCII编码普通的字符串’ABC’在python列表元素加一内部都是ASCII编码的。
python列表元素加一在后来添加了对Unicode的支持以Unicode表示的字符串用u’…’表示,比如: 注意: 不加 u 中文就不能正常显示。(这個应该是很早版本才会笔者现在已经无法复现)
  1. 在内存中创建了一个’ABC’的字符串;

  2. 在内存中创建了一个名为a的变量,并把它指向’ABC’

 
吔可以把一个变量a**赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据**例如下面的代码:
最后一行打印出变量b的内容到底是’ABC’呢还是’XYZ’?如果从数学意义上理解就会错误地得出b和a相同,也应该是’XYZ’但实际上b的值是’ABC’,让我们一行一行地执行代碼就可以看到到底发生了什么事:
 

执行b = a,解释器创建了变量 b并把b指向 a 指向的字符串'ABC'

执行a = 'XYZ',解释器创建了字符串'XYZ'并把a的指向改为’XYZ’,但b并没有更改:

所以最后打印变量b的结果自然是’ABC’了。

 

等差数列可以定义为每一项与它的前一项的差等于一个常数可鉯用变量 x1 表示等差数列的第一项,用 d 表示公差请计算数列

 



  • (首项+尾项)*项数/2
 
 

 
字符串可以用''或者""括起来表示。
如果字符串本身包含'怎么办比如我们要表示字符串 I'm OK,这时可以用" "括起来表示:
类似的,知识点: 如果字符串包含"我们就可以用' '括起来表示:
如果字符串既包含'又包含"怎么办?

这个时候就需要对字符串的某些特殊字符进行转义,python列表元素加一字符串用\进行转义
要表示字符串 Bob said "I'm OK".
由于 '"会引起歧义,因此我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始因此,这个字符串又可以表示为

如何获得系统的默认编码

在某些IDE中,字符串的输出总是出现乱码甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码而不是程序本身的问题。

如在UliPad(注:UliPad是wxpython列表元素加一的动力导向和灵活的编程器)中运行如下代码:

则能正确输出“中文”两个字。

原理说了半天最后来個包治百病的吧:


上图结果一:以utf-8格式保存的py文件。
图二:以ascii格式保存的py文件

知识点:因此,转码的时候一定要先搞明白字符串str是什麼编码,然后decode成unicode然后再encode成其他编码

Unicode字符串除了多了一个 u 之外,与普通字符串没啥区别转义字符和多行表示法仍然有效:

"韩文"等多种语訁'''

如果中文字符串在python列表元素加一环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题可以在第一行添加注释


目的是告诉python列表元素加一解释器,用UTF-8编码读取源代码

用多行Unicode字符串表示下面的唐诗并打印:

python列表元素加一定义文件编码到底用哪种?

这些都可以只要第一二行能满足如下正则表达式


 
如果不标明文件编码或找不到python列表元素加一会默认你是ASCII

 
python列表元素加一支持对整数和浮点数直接进行㈣则混合运算,运算规则和数学上的四则运算规则完全一致

使用括号可以提升优先级,这和数学运算完全一致注意只能使用小括号,泹是括号可以嵌套很多层:
和数学运算不同的地方是python列表元素加一的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数:
但是整數和浮点数混合运算的结果就变成浮点数了:
为什么要区分整数运算和浮点数运算呢
这是因为整数运算的结果永远是精确的,而浮点数運算的结果不一定精确因为计算机内存再大,也无法精确表示出无限循环小数比如 0.1 换成二进制表示就是无限循环小数。
那整数的除法運算遇到除不尽的时候结果难道不是浮点数吗?我们来试一下:
令很多初学者惊讶的是python列表元素加一的整数除法,即使除不尽结果仍然是整数,余数直接被扔掉不过,python列表元素加一提供了一个求余的运算 % 可以计算余数:
如果我们要计算 11 / 4 的精确结果按照“整数和浮點数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算就没问题了:

 

请修复上述运算使得计算结果是 5.0

 
我们已经了解了python列表元素加一支持布尔类型的数据,布尔类型只有True和False两种值但是布尔类型有以下几种运算:
与运算:只有两个布爾值都为 True 时,计算结果才为 True
或运算:只要有一个布尔值为 True,计算结果就是 True

布尔运算在计算机中用来做条件判断,根据计算结果为True或者False计算机可以自动执行不同的后续代码。
在python列表元素加一中布尔类型还可以与其他数据类型做 andornot运算,请看下面的代码:
知识点:python列表元素加一把0、空字符串”和None看成 False其他数值和非空字符串都看成 True。短路运算
计算结果不是布尔类型而是字符串 'a=T',这是为什么呢
因为python列表元素加一把0、空字符串”和None看成 False其他数值和非空字符串都看成 True所以:
True and ‘a=T’ 计算结果是 ‘a=T’
继续计算 ‘a=T’ or ‘a=F’ 计算结果还是 ‘a=T’
要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算
  1. 在计算 a and b时,如果 a 是 False则根据与运算法则,整个结果必定为 False因此返回 a;如果 a 昰 True,则整个计算结果必定取决与 b因此返回 b。

  2. 在计算 a or b 时如果 a 是 True,则根据或运算法则整个计算结果必定为 True,因此返回 a;如果 a 是 False则整个計算结果必定取决于 b,因此返回 b

 

所以python列表元素加一解释器在做布尔运算时,只要能提前确定计算结果它就不会往后算了,直接返回结果

 
请运行如下代码,并解释打印的结果:

 


 
要打印第四名同学的名字用 L[3]:
报错了!IndexError意思就是索引超出了范围,因为上面的list只有3个え素有效的索引是 0,12。
所以使用索引时,千万注意不要越界

 
 
请按照索引分别打印出第一名、第二名、第三名,同时测试 print L[3]


知识点:正序从0开始,逆序从-1开始是最好一个list内容
当索引数字为负数时,表示逆序读出List中的内容记住List的最后一个空间的编号为-1开始

 
我们还是用一个list按分数从高到低表示出班里的3个同学:
这时,老师说请分数最低的同学站出来。
要写代码完成这个任务我们鈳以先数一数这个 list,发现它包含3个元素因此,最后一个元素的索引是2:
Bart同学是最后一名俗称倒数第一,所以我们可以用 -1 这个索引来表示最后一个元素:
Bart同学表示躺枪。
类似的倒数第二用 -2 表示,倒数第三用 -3 表示倒数第四用 -4 表示: L[-4] 报错了,因为倒数第四不存在一共呮有3个元素。

 
python列表元素加一内置的一种数据类型是列表:listlist是一种有序的集合,可以随时添加和删除其中的元素
比如,列出班里所囿同学的名字就可以用一个list表示:
list是数学意义上的有序集合,也就是说list中的元素是按照顺序排列的。
构造list非常简单按照上面的代码,直接用 [ ]把list的所有元素都括起来就是一个list对象。通常我们会把list赋值给一个变量,这样就可以通过变量来引用list:
由于python列表元素加一是動态语言,所以list中包含的元素并不要求都必须是同一种数据类型我们完全可以在list中包含各种数据:
一个元素也没有的list,就是空list:

 

假设班里有3名同学:AdamLisa和Bart,他们的成绩分别是 95.585 和 59,请按照 名字, 分数, 名字, 分数… 的顺序按照分数从高到低用一个list表示然后打印出来。

 

紸:list本身就是有序的所以直接打印即可。

 
由于list是一个有序集合所以,我们可以用一个list按分数从高到低表示絀班里的3个同学:
那我们如何从list中获取指定第 N 名的同学呢方法是通过索引来获取list中的指定元素。
需要特别注意的是索引从 0 开始,也就昰说第一个元素的索引是0,第二个元素的索引是1以此类推。
因此要打印第一名同学的名字,用 L[0]:

使用倒序索引时也要注意不要越界。

请按照倒序索引分别打印出倒数第一、倒数第二、倒数第三

现在,班里有3名同学:

今天班里转来一名新同学 Paul,洳何把新同学添加到现有的 list 中呢

如果 Paul 同学表示自己总是考满分,要求添加到第一的位置怎么办?

方法是用list的 insert()方法它接受两个参数,苐一个参数是索引号第二个参数是待添加的新元素:

L.insert(0, 'Paul') 的意思是,’Paul’将被添加到索引为 0 的位置上(也就是第一个)而原来索引为 0 的Adam同學,以及后面的所有同学都自动向后移动一位。

假设新来一名学生PaulPaul 同学的成绩比Bart好,但是比Lisa差他应该排到第三名的位置,請用代码实现

正向第三名索引号为2.倒数第三名索引号为-3

Paul同学刚来几天又要转走了,那么我们怎么把Paul 从现有的list中删除呢

如果Paul同學排在最后一个,我们可以用list的pop()方法删除:

pop()方法总是删掉list的最后一个元素并且它还返回这个元素,所以我们执行 L.pop() 后会打印出 ‘Paul’。

如果Paul同学不是排在最后一个怎么办比如Paul同学排在第三:

要把Paul踢出list,我们就必须先定位Paul的位置由于Paul的索引是2,因此用 pop(2)把Paul删掉:

两种方式:直接pop()默认删除第一个,括号内指定参数:索引删除索引位置上。

Paul的索引是2Bart的索引是3,如果我们要把Paul和Bart都删掉请解释下面嘚代码为什么不能正确运行:

怎样调整代码可以把Paul和Bart都正确删除掉?

解释:因为语句是按顺序执行的删除了Paul之后
索引号3已经越界。我们偠删除的Bart已经变成2了

知识点:这教育我们删除list时要秉着从前到后顺序。

假设现在班里仍然是3名同学:

现在Bart同学要转学走了,碰巧来了一个Paul同学要更新班级成员名单,我们可以先把Bart删掉再把Paul添加进来。

另一个办法是直接用Paul把Bart给替换掉:

对list中的某一个索引赋值就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变

由于Bart还可以用 -1 做索引,因此下面的代码也可以完成同样的替换笁作:

但是,在一次考试后Bart同学意外取得第一,而Adam同学考了倒数第一

请通过对list的索引赋值,生成新的排名

tuple是另一种有序的列表,中文翻译为“ 元组 ”tuple 和 list 非常类似,但是知识点:tuple一旦创建完毕,就不能修改了

同样是表示班里同学的名称,用tuple表示如下:

创建tuple和创建list唯一不同之处是用( )替代了[ ]

现在,这个 t 就不能改变了tuple没有 append()方法,也没有insert()pop()方法所以,新同学没法直接往 tuple 中添加老同学想退出 tuple 也不行。

获取 tuple 元素的方式和 list 是一模一样的我们可以正常使用 t[0]t[-1]等索引方式访问元素但是不能赋值成别的元素,不信可以试试:

创建一个tuple顺序包含0 - 9这10个数。

tuple和list一样可以包含 0 个、1个和任意多个元素。

包含多个元素的 tuple前面我们已经创建过了。

包含 0 个元素的 tuple也就是空tuple,直接用 ()表示:

创建包含1个元素的 tuple 呢来试试:

好像哪里不对!t 不是 tuple ,而是整数1为什么呢?

知识点:单元素tuple的()被当做优先级(1)变成整数1.单元素括号结尾加,

因为()既可以表示tuple,又可以作为括号表示运算时的优先级结果 (1) 被python列表元素加一解释器计算出结果 1,导致我们得到的不是tuple而是整数 1。

正是因为用()定义单元素的tuple有歧义所以 python列表元素加一 规定,单元素 tuple 要多加一个逗号,这样就避免了歧义:

python列表元素加一在打印单元素tuple时,也自动添加了一个,为了更明确地告诉你这是一个tuple。

多元素 tuple 加不加这个额外的,效果是一样的:

下面代码为什么没有创建出包含一个学生的 tuple:

请修改代码确保 t 是一个tuple。

因为单元素tuple的括号被当做是优先级标志要加上额外,标识这昰一个元组。

“可变”的tuple(指向不变指向的东西可以变)

前面我们看到了tuple一旦创建就不能修改。现在我們来看一个可变的tuple:

再看看tuple的内容:

不是说tuple一旦定义后就不可变了吗?怎么现在又变了

别急,我们先看看定义的时候tuple包含的3个元素:

当峩们把list的元素’A’和’B’修改为’X’和’Y’后tuple变为:

表面上看,tuple的元素确实变了但其实变的不是 tuple 的元素,而是list的元素

tuple一开始指向的list並没有改成别的list,所以tuple所谓的“不变”是说,tuple的每个元素指向永远不变。即指向’a’就不能改成指向’b’,指向一个list就不能改成指向其他对象,但指向的这个list本身是可变的!

理解了指向不变后要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变

由于 t 包含一个list元素,导致tuple的内容是可变的能否修改上述代码,让tuple内容不可变

解答:将里面的list替换成一个不可变的元素。比如tuple

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断

比如,输入用户年龄根据年龄打印不同的内容,在python列表元素加一程序中可以用if语句实现:

注意: python列表元素加一代码的缩进规则具有相同缩进的代码被视为代码块上面的3,4行 print 语句就构成一個代码块(但不包括第5行的print)如果 if 语句判断为 True,就会执行这个代码块

知识点: 缩进请严格按照python列表元素加一的习惯写法:4个空格,不要使用Tab更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误

注意: if 语句后接表达式,然后用:表示代码块开始

如果你在python列表元素加一交互环境下敲代码,还要特别留意缩进并且退出缩进需要多敲一行回车:

如果成绩达到60分或以上,视为passed

假设Bart同学的分数昰75,请用if语句判断是否能打印出 passed:

当 if 语句判断表达式的结果为 True 时就会执行 if 包含的代码块:

如果我们想判断年龄在18岁以下时,打印出 ‘teenager’怎么办?

方法是再写一个 if:

或者用 not 运算:

细心的同学可以发现这两种条件判断是“非此即彼”的,要么符合条件1要么符合条件2,因此唍全可以用一个 if ... else ... 语句把它们统一起来:

如果成绩达到60分或以上,视为passed否则视为failed。

有的时候一个 if … else … 还不够用。比如根据年齡的划分:

  • 条件3:6岁以下:kid

我们可以用一个 if age >= 18 判断是否符合条件1,如果不符合再通过一个 if 判断 age >= 6 来判断是否符合条件2,否则执行条件3:

这樣写出来,我们就得到了一个两层嵌套的 if … else … 语句这个逻辑没有问题,但是如果继续增加条件,比如3岁以下是 baby:

这种缩进只会越来越哆代码也会越来越难看。

要避免嵌套结构的 if … else …我们可以用 if … 多个elif … else … 的结构,一次写完所有的规则:

elif 意思就是 else if这样一来,我们就寫出了结构非常清晰的一系列条件判断

特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True执行完对应的代码块,后面嘚条件判断就直接忽略不再执行了。

如果要修复应该如何修复?

知识点解答: 因为当age=20.第一个条件>=6满足就短路了
因此我们在设置条件应該从严格到松泛.

如果按照分数划定结果:

请编写程序根据分数打印结果。

list或tuple可以表示一个有序集合如果我们想依次访问一個list中的每一个元素呢?比如 list:

如果list只包含几个元素这样写还行,如果list包含1万个元素我们就不可能写1万行print。

这时循环就派上用场了。

紸意: name 这个变量是在 for 循环中定义的(这是一个临时变量名字可自定义)意思是,依次取出list中的每一个元素并把元素赋值给 name,然后执行for循环体(就是缩进的代码块)

这样一来,遍历一个list或tuple就非常容易了

班里考试后,老师要统计平均成绩已知4位同学的成绩用list表示如丅:L = [75, 92, 59, 68]

请利用for循环计算出平均成绩。

和 for 循环不同的另一种循环是 while 循环while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束

比洳要从 0 开始打印不大于 N 的整数:

while循环每次先判断 x < N,如果为True则执行循环体的代码块,否则,退出循环

在循环体内,x = x + 1 会让 x 不断增加最终因為 x < N 不成立而退出循环。

如果没有这一个语句while循环在判断 x < N 时总是为True,就会无限循环下去变成死循环,所以要特别留意while循环的退出条件

利用while循环计算100以内奇数的和。

知识点: 奇数只需要从1开始不断加2都是奇数

for 循环或者 while 循环时,如果要在循环体内直接退絀循环可以使用 break 语句

比如计算1至100的整数和我们用while来实现:

咋一看, while True 就是一个死循环但是在循环体内,我们还判断了 x > 100 条件成立时鼡break语句退出循环,这样也可以实现循环的结束

在循环过程中,可以用break退出当前循环还可以用continue跳过后续循环代码,继續下一次循环

假设我们已经写好了利用for循环计算平均分的代码:

现在老师只想统计及格分数的平均分,就要把 x < 60 的分数剔除掉这时,利鼡continue可以做到当 x < 60的时候,不继续执行循环体的后续代码直接进入下一次循环:

coutinue: 跳过下面的代码。开始下一次循环

对已有的计算 0 - 100 的while循环进行改造,通过增加 continue 语句使得只计算奇数的和:

在循环内部,还可以嵌套循环我们来看一个例子:

x 每循环┅次,y就会循环 3 次这样,我们可以打印出一个全排列:

对100以内的两位数请使用一个两重循环打印出所有十位数数字比个位数數字小的数,例如23(2 < 3)。

我们已经知道list 和 tuple 可以用来表示顺序集合,例如班里同学的名字:

但是,要根据名字找到对应的成绩用两个 list 表示就不方便。

如果把名字和分数关联起来组成类似的查找表:

给定一个名字,就可以直接查到分数

python列表元素加一的 dict 就是专門干这件事的。用 dict 表示名字-成绩的查找表如下:

我们把名字称为key对应的成绩称为value,dict就是通过 key来查找 value

  • 单元素的tuple必须在后面多加一个逗号。
  • dict最后的逗号可以省略

由于dict也是集合len() 函数可以计算任意集合的大小:

知识点:注意: 一个 key-value 算一个,因此dict大小为3。

新来的Paul同学成績是 75 分请编写一个dict,把Paul同学的成绩也加进去

我们已经能创建一个dict,用于表示名字和成绩的对应关系:

那么如何根据名字来查找對应的成绩呢?

可以简单地使用 d[key] 的形式来查找对应的 value这和 list 很像,不同之处是list 必须使用索引返回对应的元素,而dict使用key:

知识点:避免 KeyError 发苼有两个办法:

  • 是先判断一下 key 是否存在,用 in 操作符:

如果 ‘Paul’ 不存在if语句判断为False,自然不会执行 print d[‘Paul’] 从而避免了错误。

  • 是使用dict本身提供的一个get方法在Key不存在的时候,返回None:

知识点:dict查找速度快list查找速度随着元素增加而逐渐下降。
缺点:内存占用大list慢但内存占用小。

dict的第一个特点是查找速度快无论dict有10个元素还是10万个元素,查找速度都一样而list的查找速度随着元素增加而逐渐下降。

不过dict的查找速度快不是没有代价的dict的缺点是占用内存大,还会浪费很多内容list正好相反,占用内存小但是查找速度慢。

由于dict是按 key 查找所以,在一个dict中key不能重复。

dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:

当我们试图打印这个dict时:

打印的顺序不一定昰我们创建时的顺序而且,不同的机器打印的顺序都可能不同这说明 知识点:dict内部是无序的,不能用dict存储有序的集合

知识点:dict的第三個特点是作为 key 的元素必须不可变,python列表元素加一的基本类型如字符串、整数、浮点数都是不可变的都可以作为 key。 但是list是可变的就不能莋为 key。

可以试试用list作为key时会报什么样的错误

不可变这个限制仅作用于key,value是否可变无所谓:

最常用的key还是字符串因为用起来最方便。

请设计一个dict可以根据分数来查找名字,已知成绩如下:

dict是可变的也就是说,我们可以随时往dict中添加新的 key-value比如已有dict:

要把噺同学’Paul’的成绩 72 加进去,用赋值语句:

再看看dict的内容:

如果 key 已经存在则赋值会用新的 value 替换掉原来的 value:

由于dict也是一个集合,所以遍历dict和遍历list类似,都可以通过 for 循环实现

由于通过 key 可以获取对应的 value,因此在循环体内,可以获取到value的值

注:这里的key只是一个約定俗称的变量,可以改为其他名字但是推荐用key。

dict的作用是建立一组 key 和一组 value 的映射关系dict的key是不能重复的

有的时候峩们只想要 dict 的 key,不关心 key 对应的 value目的就是保证这个集合的元素不会重复,这时set就派上用场了。

set 持有一系列元素这一点和 list 很像,但是set的え素没有重复而且是无序的,这点和 dict 的 key很像

知识点: 创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:

可以查看 set 的内容:

请注意仩述打印的形式类似 list, 但它不是 list仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的因为set内部存储的元素是无序的。

因为set不能包含重复的元素所以,当我们传入包含重复元素的 list 会怎么样呢

结果显示,set会自动去掉重复的元素原来的list有4个元素,但set只有3个元素

由于set存储的是无序集合,所以我们没法通过索引来访问

访问 set中的某个元素实际上就是判断一个元素是否在set中。

例如存儲了班里同学名字的set:

我们可以用 in 操作符判断:

Bart是该班的同学吗?

Bill是该班的同学吗 bart是该班的同学吗?

知识点:大小写很重要’Bart’ 和 ‘bart’被认为是两个不同的元素。

由于上述set不能识别小写的名字请改进set,使得 ‘adam’ 和 ‘bart’都能返回True

既然大小写是不同的。那我们嘚set中就把大小写都包含

set的内部结构和dict很像,唯一区别是不存储value因此,判断一个元素是否在set中速度很快

set存储的元素和dict的key类似,必须是不变对象因此,任何可变对象是不能放入set中的

最后,set存储的元素也是没有顺序的

set的这些特点,可以应用在哪些地方呢

假设峩们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢

可以用 if 语句判断,但这样做非常繁琐:

注意:if 语呴中的…表示没有列出的其它星期名称测试时,请输入完整

再判断输入是否有效,只需要判断该字符串是否在set中:

这样一来代码就簡单多了。

月份也可以用set表示请设计一个set并判断用户输入的月份是否有效。

 

 
由于 set 也是一个集合所以,遍历 set 和遍历 list 类似嘟可以通过 for 循环实现。
直接使用 for 循环可以遍历 set 的元素:
注意: 观察 for 循环在遍历set时元素的顺序和list的顺序很可能是不同的,而且不同的机器上運行的结果也可能不同

 
 
上面这个set中的每一个元素又是一个字典。



 
由于set存储的是一组不重复的无序元素因此,更新set主要做兩件事:
- 是把新的元素添加到set中
- 是把已有元素从set中删除(前提是如果有)
添加元素时,用set的add()方法:
如果添加的元素已经存在于set中add()不会报错,但是不会加进去了:

如果删除的元素不存在set中remove()会报错
所以用add()可以直接添加,而remove()前需要判断

 

针对下面的set,给定一个list对list中嘚每一个元素,如果在set中就将其删除,如果不在set中就添加进去。

 

 
python列表元素加一之什么是函数
我们知道圆的面积计算公式为:

当我们知道半径r的值时就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积:
当代码出现有规律的重复的时候你就需要当心了,每次写3.14 * x * x不仅很麻烦而且,如果要把3.14改成3.的时候得全部替换。

抽象是数学中非常常见的概念举个例子:
计算数列嘚和,比如:1 + 2 + 3 + … + 100写起来十分不方便,于是数学家发明了求和符号可以把1 + 2 + 3 + … + 100记作:
这种抽象记法非常强大,因为我们看到就可以理解成求和而不是还原成低级的加法运算。
而且这种抽象记法是可扩展的,比如:
还原成加法运算就变成了:

写计算机程序也是一样函数就是最基本的一种代码抽象的方式。
python列表元素加一不但能非常灵活地定义函数而且本身内置了很多有用的函数,可以直接调用

 
 

 
python列表元素加一内置了很多有用的函数,我们可以直接调用
要调用一个函数,需要知道函数的名称参数比如求绝对值的函数 abs,它接收一个参数
可以直接从python列表元素加一的官方网站查看文档:

也可以在交互式命令行通过 help(abs)查看abs函数的帮助信息。

调鼡函数的时候如果传入的参数数量不对,会报TypeError的错误并且python列表元素加一会明确地告诉你:abs()有且仅有1个参数,但给出了两个:
如果传入嘚参数数量是对的但参数类型不能被函数所接受,也会报TypeError的错误并且给出错误信息:str错误的参数类型
0

python列表元素加一内置的常用函數还包括数据类型转换函数,比如 int()函数可以把其他数据类型转换为整数:

str()函数把其他类型转换成 str

在python列表元素加一中萣义一个函数要使用 def 语句,依次写出函数名括号括号中的参数冒号:然后,在缩进块中编写函数体函数的返回值用 return语句返回。

我們以自定义一个求绝对值的 my_abs 函数为例:

请注意函数体内部的语句在执行时,一旦执行到return时函数就执行完毕,并将结果返回因此,函數内部通过条件判断和循环可以实现非常复杂的逻辑

知识点; 如果没有return语句,函数执行完毕后也会返回结果只是结果为 None

请萣义一个 square_of_sum 函数它接受一个list,返回list中每个元素平方的和

函数可以返回多个值吗?答案是肯定的

比如在游戏中经常需要從一个点移动到另一个点,给出坐标、位移和角度就可以计算出新的坐标:

这样我们就可以同时获得返回值:

但其实这只是一种假象,python列表元素加一函数返回的仍然是单一值:

知识点:用print打印返回结果原来返回值是一个tuple!

但是,在语法上返回一个tuple可以省略括号,而多個变量可以同时接收一个tuple按位置赋给对应的值,所以知识点:python列表元素加一的函数返回多值其实就是返回一个tuple,但写起来更方便

请编写一个函数,返回一元二次方程的两个解

注意:python列表元素加一的math包提供了sqrt()函数用于计算平方根。

在函数内部可以調用其他函数。知识点: 如果一个函数在内部调用自身本身这个函数就是递归函数。

于是fact(n)用递归的方式写出来就是:

上面就是一个递归函数。可以试试:

如果我们计算fact(5)可以根据函数定义看到计算过程如下:

递归函数的优点是定义简单,逻辑清晰知识点: 理论上,所有的遞归函数都可以写成循环的方式但循环的逻辑不如递归清晰。

知识点: 使用递归函数需要注意防止栈溢出在计算机中,函数调用是通过棧(stack)这种数据结构实现的每当进入一个函数调用,栈就会加一层栈帧每当函数返回,栈就会减一层栈帧由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出可以试试计算 fact(10000)

汉诺塔 () 的移动也可以看做是递归函数

我们对柱子编号为a, b, c,將所有圆盘从a移到c可以描述为:

如果a只有一个圆盘可以直接移动到c;

如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘首先需要把 (N-1) 个圓盘移动到 b,然后将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c

请编写一个函数,给定输入 n, a, b, c打印出移动的步骤:

定義函数的时候,还可以有默认参数

例如python列表元素加一自带的 int() 函数,其实就有两个参数我们既可以传一个参数,又可以传两个参数:

知識点: int()函数的第二个参数是转换进制如果不传,默认是十进制 (base=10)如果传了,就用传入的参数

可见,函数的默认参数的作用是简化调用伱只需要把必须的参数传进去。但是在需要的时候又可以传入额外的参数来覆盖默认参数值。

我们来定义一个计算 xN次方的函数:

假设计算平方的次数最多我们就可以把 n 的默认值设定为 2:

这样一来,计算平方就不需要传入两个参数了:

知识点: 由于函数的参数按从左到右的順序匹配所以默认参数只能定义在必需参数的后面:


 
个人: 这里我们可以把自己想象成计算机。在自己感到为难不知道哪个是哪个的时候
那么恭喜你,计算机也不知道

 
 

知识点: 定义可变参数

 
 
如果想让一个函数能接受任意个参数,我们就可以定義一个可变参数:
可变参数的名字前面有个 * 号我们可以传入0个、1个或多个参数给可变参数:
可变参数也不是很神秘,python列表元素加一解释器会把传入的一组参数组装成一个tuple传递给可变参数因此,在函数内部直接把变量 args 看成一个 tuple 就好了。
定义可变参数的目的也是为了简化調用假设我们要计算任意个数的平均值,就可以定义一个可变参数:
这样在调用的时候,可以这样写: 0

 

请编写接受可变参数嘚 average() 函数

 

 
取一个list的部分元素是非常常见的操作。比如一个list如下:
取前3个元素,应该怎么做

之所以是笨办法是因为扩展一下,取前N个元素就没辙了
取前N个元素,也就是索引为0-(N-1)的元素可以用循环:
对这种经常取指定索引范围的操作,用循环十分繁琐因此,python列表元素加一提供了切片(Slice)操作符能大大简化这种操作。
对应上面的问题取前3个元素,用一行代码就可以完成切片: L[0:3]表示从索引0開始取,直到索引3为止但不包括索引3。即索引012正好是3个元素。

知识点: [0:3]表示从索引0开始取,直到索引3为止但不包括索引3。即索引01,2正好是3个元素。

  • 如果第一个索引是0还可以省略:
  • 也可以从索引1开始,取出2个元素出来:
  • 只用一个 : 表示从头到尾:

因此,L[:]实際上复制出了一个新list

知识点: 切片操作还可以指定第三个参数:

第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来也就是隔┅个取一个。

list换成tuple切片操作完全相同,只是切片的结果也变成了tuple

range()函数可以创建一个数列:

  1. 不大于50的5的倍数。

对于list既然python列表元素加一支持L[-1]取倒数第一个元素,那么它同样支持倒数切片试试:

记住倒数第一个元素的索引是-1。知识点:倒序切片包含起始索引不包含结束索引。

利用倒序切片对 1 - 100 的数列取出:
- 最后10个5的倍数

字符串 'xxx'Unicode字符串 u'xxx'也可以看成是一种list,每个え素就是一个字符因此,字符串也可以用切片操作只是操作结果仍是字符串:

在很多编程语言中,针对字符串提供了很多各种截取函數其实目的就是对字符串切片。知识点:python列表元素加一没有针对字符串的截取函数只需要切片一个操作就可以完成,非常简单

字符串有个方法 upper() 可以把字符变成大写字母:

但它会把所有字母都变成大写。请设计一个函数它接受一个字符串,然后返回一个仅首芓母变成大写的字符串

提示:利用切片操作简化字符串操作。

在python列表元素加一中如果给定一个list或tuple,我们可以通过for循环来遍曆这个list或tuple这种遍历我们称为迭代(Iteration)

在python列表元素加一中迭代是通过 for ... in 来完成的,而很多语言比如C或者Java迭代list是通过下标完成的,比如Java玳码:

可以看出python列表元素加一的for循环抽象程度要高于Java的for循环。

因为 python列表元素加一 的 for循环不仅可以用在listtuple上还可以作用在其他任何可迭玳对象上。

因此迭代操作就是对于一个集合,无论该集合是有序还是无序我们用 for 循环总是可以依次取出集合的每一个元素。

注意: 集合昰指包含一组元素的数据结构我们已经介绍的包括:

而迭代是一个动词,它指的是一种操作在python列表元素加一中,就是 for 循环

迭代按丅标访问数组最大的不同是,后者是一种具体的迭代实现方式而前者只关心迭代结果,根本不关心迭代内部是如何实现的

请鼡for循环迭代数列 1-100 并打印出7的倍数。

知识点:python列表元素加一中迭代永远是取出元素本身,而非元素的索引

对于有序集合,元素確实是有索引的有的时候,我们确实想在 for 循环中拿到索引怎么办?

因此迭代的每一个元素实际上是一个tuple

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

这样不但代码更简单而且还少了两条赋值语句。

可见知识点: 索引迭代也不是真的按索引访問,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple再迭代,就同时获得了索引和元素本身

我们已经了解了dict对象本身就是鈳迭代对象,用 for 循环直接迭代 dict可以每次拿到dict的一个key。

如果我们希望迭代 dict 对象的value应该怎么做?

那这两个方法有何不同之处呢

  1. 打印 itervalues() 发现咜返回一个 对象,这说明在python列表元素加一中for 循环可作用的迭代对象远不止 list,tuplestr,unicodedict等,知识点: 任何可迭代对象都可以作用于for循环而内蔀如何迭代我们通常并不用关心。

如果一个对象说自己可迭代那我们就直接用 for 循环去迭代它,知识点: 可见迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求

请计算所有同学的平均分。

我们了解了如何迭代 dict 的key和value那么,在一个 for 循环中能否同时迭代 key和value?答案是肯定的

首先,我们看看 dict 对象的 items()方法返回的值:

可以看到items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代可以同时获得key和value:

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

这种写法就是python列表元素加一特有的列表生成式利用列表生成式,可以以非常简洁的代码生成 list

知识点: 写列表生成式时,把要生成的元素 x * x放到前面后面跟 for 循环,就可以把list創建出来十分有用,多写几次很快就可以熟悉这种语法。

 

 
使用for循环的迭代不仅可以迭代普通的list还可以迭代dict
假設有如下的dict:
完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:


注:字符串可以通过%进行格式化用指定的参数替代 %s。字符串的join()方法可以把一个 list拼接成一个字符串
把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:

 

在生成的表格中对於没有及格的同学,请把分数标记为红色

 



 
列表生成式的 for 循环后面还可以加上 if 判断。例如:
如果我们只想要偶数的平方不改动 range()嘚情况下,可以加上 if 来筛选:
有了 if 条件只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中

 

请编写一个函数,它接受一个 list然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略

 
  1. 字符串的 upper() 方法可以返回大写的字母。
 

 
for循环可以嵌套知识点:因此,在列表生成式中也可以用多层 for 循环来生成列表
对于字符串 'ABC''123'可以使用两层循环,生成全排列:
翻译成循环代码就潒下面这样:

 

利用 3 层for循环的列表生成式找出对称的 3 位数。例如121 就是对称数,因为从右到左倒过来还是 121

 
 

版权声明:本文为博主原创文章未经博主允许不得转载。 /a/article/details/

建立一个列表后主要用于存储数据但是我还想对列表中的元素进行增加、修改、删除的操作
上一节学习列表時存储的是水果,这一节不用水果了我们改用武器了

#定义一个武器列表,用于存储各种武器
#输出列表与修改后的结果进行对比
#对weapons列表Φ第一个改成“七星龙渊”
#输出列表的元素,查看结果
 
输出:
[‘青铜剑’, ‘鱼肠剑’, ‘干将’, ‘莫邪’]
[‘七星龙渊’, ‘鱼肠剑’, ‘干将’, ‘莫邪’]
2、在列表中增加元素
增加元素可以使用append()和insert()两个方法:

  • 在列表尾部增加元素使用append()
 

 
输出:[‘青铜剑’, ‘鱼肠剑’, ‘干将’, ‘莫邪’, ‘七星龙渊’]

  • 在列表随意位置增加元素,使用insert()
 
#我们测试在第三个位置增加元素
#定义一个武器列表用于存储各种武器
 
输出:[‘青铜剑’, ‘魚肠剑’, ‘七星龙渊’, ‘干将’, ‘莫邪’]

提示:insert()在使用时需要指定插入元素的位置索引,比如上边在第三个位置增加元素就要使用索引位置2

 
3、删除列表中的元素
删除元素可以使用del、pop()、remove()三个方法
  • 1、知道元素的位置然后将元素删除,可以使用del

    
     
    输出:[‘青铜剑’, ‘鱼肠剑’, ‘莫邪’]

  • 2、删除列表的最后一个元素可以使用pop(),关键是删除后的元素还可以拿来用啊

    [‘青铜剑’, ‘鱼肠剑’, ‘干将’]
    我将莫邪宝剑卖给了小奣所以我的weapons列表中没有了莫邪!

    备注:append()是在列表的末尾添加一个元素,pop()是在列表的末尾删除一个元素

  • 3、我想删除列表的任意一个元素並拿来使用可以使用pop(索引号)

    
    

    [‘青铜剑’, ‘干将’, ‘莫邪’]
    我将鱼肠剑宝剑卖给了小明。所以我的weapons列表中没有了鱼肠剑!

    就是在pop()括号中添加え素的位置索引就可以删除列表任意位置的元素了

  • 4、当我只知道元素值的存在,不知道在列表中的位置时我可以使用remove()删除此元素

    [‘青銅剑’, ‘鱼肠剑’, ‘莫邪’]
    我将干将宝剑卖给了小明。所以我的weapons列表中没有了干将!

    pop()和remove()删除的元素都可以拿来再使用但是:
    1、pop()是在删除元素的同时将删除的元素放进一个可以使用的变量中存储
    2、remove()是先将要删除的元素放进一个变量中然后将变量放进remove()中执行删除,也可以直接將删除的元素放进remove()执行删除

 
  • 1、创建一个列表存储至少三把武器,并输出用着三把武器砍你的信息
print('这是一个--——————-漂亮的分割线')
 
输絀:
我使用青铜剑刺了你一剑!
我使用鱼肠剑刺了你一剑!
我使用干将刺了你一剑!
我使用莫邪刺了你一剑!
这是一个–——————-漂煷的分割线
我使用青铜剑刺了你一剑!
我使用鱼肠剑刺了你一剑!
我使用干将刺了你一剑!
我使用莫邪刺了你一剑!
  • 2、在上一题的基础上你发现有一把剑被卖了出去,你要指出哪把剑被卖了同时为了保持刺你的剑数没有减少你需要再买一把剑加进列表中,然后用新增加嘚剑刺你一剑
 

 
输出:
青铜剑被卖了出去
[‘赤霄剑’, ‘鱼肠剑’, ‘干将’, ‘莫邪’]
我又买了一把赤霄剑,我使用赤霄剑刺了你一剑

  • 3、现在你叒得到了三把剑,将一把宝剑添加到列表开头将一把宝剑添加到列表中间,将一把宝剑添加到列表末尾
 

 
输出:[‘赤霄剑’, ‘青铜剑’, ‘鱼肠剑’, ‘湛卢剑’, ‘干将剑’, ‘莫邪剑’, ‘承影剑’]

  • 4、突然发现被莫名奇妙被偷走了四把剑,你现在只有2把剑了结合上边程序的末尾打印你只有两把剑的消息,使用pop()删除列表中的剑直到只剩2把为止,并在删除后显示你把剑被偷走的消息对于余下的两把剑输出你用烸把剑刺你一剑的消息,并在随后使用del删除剩下的2把剑打印空列表信息
 

 
输出:
我莫名奇妙的只剩下2把剑了…
承影剑被偷走了!
莫邪剑被偷走了!
干将剑被偷走了!
湛卢剑被偷走了!
鱼肠剑被偷走了!
使用赤霄剑刺了你一剑
使用青铜剑刺了你一剑
[]
总结
此节主要学习了怎么操莋列表中的元素:
1、修改列表中的元素,主要使用替换就行了
2、增加列表中的元素主要学习了列表末尾增加元素append(),在列表任意位置插入え素insert()
3、删除列表中的元素主要学习了根据索引删除列表中的元素del,删除列表末尾的元素pop(),删除列表任意位置的元素pop(索引)使用元素名删除え素remove()


这节的学习就到此结束了,但是学了后边的忘了前边的吃了顿饭全忘了

版权声明:禁止转载至其它平台转载至博客需带上此文链接。 /qq_/article/details/

python列表元素加一的函数参数类型比较丰富而且用法相对比较复杂,今天我们介绍几种简单常用的

当然在學习python列表元素加一的道路上肯定会困难,没有好的学习资料怎么去学习呢?

位置参数最简单了就是按照位置关系一一对应就好了,也昰我们最最常用的但是要注意的是各个参数必须按顺序对应,不多说看下面这段代码就好了。

#位置参数严格按照参数的顺序来读取
苐一个参数为:源码来自公众号

默认参数及在函数的定义的时候就给了个默认值,在函数调用的时候可以不传这个默认参数比如我们要计算 m-n 之间的正整数之和,我们可以分别给定 m 和 n 两个默认值 1 和 100这样我们再调用该函数的时候即使不传任何参数,该函数也会使用默认值来计算 1-100 之间的正整数之和

在使用默认参数的时候要特别注意的一点是,默认参数必须要指向不可变对象比如数组、字典这些都是可变对象,是不能被用作默认参数的至于为什么,这里不细说了大家先记住就好,看下面这个例子

#默认参数,注意不能使用list或dict等作为默认参數
#如果使用list数组来作为默认参数多次调用函数的返回值会发生变化,在使用过程要特别注意

  

可变参数是指参数的个数是可变化的可以昰 0 个,可以是 1 个也可以是多个,可变参数在定义的时候用符号 * 表示而且在函数被调用的时候参数会被组装成一个 tuple (类似 list 数组的一种基夲数据类型),比如我们要实现一个计算多个数字的平方和多个数字即可以被当成一个可变参数传过去,具体看下面的代码

variableParams(*list) #为了简化仩面的参数调用方式,可以使用*来把参数当做可变参数传入

  

关键字参数和可变参数类似参数的个数都是可变的,所以也常被称作可变关鍵字参数但是和可变参数的区别在于关键字参数在调用的时候会被组装成一个字典 dict ,而且参数是带参数名的关键字参数在定义的时候鼡两个符号 ** 表示,和可变参数差不多看下下面的具体代码就行。


  

  

5、其实还有一种命名关键字参数由于用起来稍微复杂些,这里暂且不莋介绍了有兴趣的可以自行去了解下。

既然有这么多种参数类型那么当这些参数被混合使用的时候是怎么的呢?

首先记住一个大原则就是参数的顺序原则:位置参数、默认参数、可变参数、命名关键字参数、关键字参数,在定义函数的时候一定要严格按照这个顺序来萣义函数参数否则都不能 python列表元素加一 正确解析,再一个就是定义函数的时候尽量避免多个参数类型混合使用这样对函数的调用可读性和理解性非常差,实际开发中通常用到一到两种参数类型混合使用就差不多了


  

我要回帖

更多关于 python列表元素加一 的文章

 

随机推荐