学Python,最高效的方法其实就是自学+自问+实战(海伦泰勒学习法的精简版)。
本文分为3大板块,不仅要帮你0基础入门,还专门写了进阶内容。
进阶内容中这51个Python的秘密,你可不一定知道。
并且免费课程处会带大家一起做实战项目,还有前BAT高级技术专家+名校硕博级讲师和助教团队进行答疑。 />
一、基础入门:用140+页把Python各种知识点图文化文字化,用大家都听得懂的话,彻底给讲明白。
1.Python的背景
2.Python应用场景
3.基础语法
4.对象
5.字符串
6.列表
7.元组
8.字典
9.三元表达式
10.条件判断
11.循环语句
12.循环控制
13.迭代器与生成器
14.异常
二、免费的Python课程。BAT高级技术专家教学,还配上了实战项目,有问题随时可以咨询。
光看不练,你用1年看100本书也没有效果的。 />
三、进阶:
等你略懂Python后,必须要看的51个Python的秘密。
GitHub上2万+星,收集了难以理解和反人类直觉的例子以及鲜为人知的功能特性。
入门部分
一、认识Python />
Python 是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
二、Python应用场景
1. Web应用开发
Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。
Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序。
2. 操作系统管理、服务器运维的自动化脚本
在很多操作系统里,Python是标准的系统组件。大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端下直接运行Python。
有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。
Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操作系统功能的库。
通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它Windows API。
使用IronPython,Python程序能够直接调用.Net Framework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。
3. 网络爬虫
Python有大量的HTTP请求处理库和HTML解析库,并且有成熟高效的爬虫框架Scrapy和分布式解决方案scrapy-redis,在爬虫的应用方面非常广泛。
4. 科学计算
NumPy、SciPy、Pandas、Matplotlib可以让Python程序员编写科学计算程序。
5. 桌面软件
PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器。
6. 服务器软件(网络软件)
Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。
第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。
7. 游戏
很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。
相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。
8. 构思实现,产品早期原型和迭代
Google、NASA、Facebook都在内部大量地使用Python。
(长文预警,后续还有超万字,建议先双击屏幕点赞,省的以后找不到这个回答了,也可以直接在文末/评论区看领免费课的方式,直接实战+学习结合了)
三、Python基础知识
1. 语法基础:注释
在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。python 常用单行注释是 # ,常用多行注释是三对单引号 ''' '''
# 这是一个单行注释
# print("七月你好,我是八月.") 此行代码不执行显示.
# 快捷键: ctrl + / 快速设置注释 和 快速取消注释
'''
这是一个多行注释
该范围内的代码不会执行显示
'''
2. 语法基础:数据类型 />
3. 语法基础:关键字和标识符
关键字
python 一些具有特殊功能的标识符,这就是所谓的关键字。关键字,是 python 已经使用的了,所以不允许开发者自己定义和关键字相同的名字的标识符
那么 python 中关键字都有哪些呢?
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
那么咱们如何去查询 python 中有哪些关键字呢?
# 在python中若想查询python中有哪些关键字可以先导入keyword模块
import keyword #导入关键字模块
print(keyword.kwlist) #查询所有关键字
实际操作 />温馨提示:咱们在起变量名或者文件名时不能使用这些关键字名字哟,否则会报错.抛出异常~请大家注意哟。
标识符
祖国的花朵(开发人员)在程序中自定义的一些符号和名称。标示符是咱们自己定义的,如变量名、函数名、类名等。
标识符规则
定义这些标识符也有一定的规则:标识符由字母下划线和数字组成,但是不能以数字开头,可以使用下划线或字母开头,注意在 python 中,标识符是严格区分大小写的哟。 变量 Andy 不等于 变量 andy 这是两个变量。
标识符命名规则
命名规则,可以简单的理解为,咱们在起名字的时候是需要遵守相关规则的.主要是为了让别人一看就明白是什么意思,做什么用的.可以提高代码可读性。比如:名字 就定义为 name , 定义学生用 student。
驼峰命名法
同时呢,在需要多个单词进行组合时,咱们使用驼峰命名法:
小驼峰式命名法: 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
大驼峰式命名法: 每一个单字的首字母都采用大写字母,例如:FirstName、LastName。不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf
名字和对象之间关系
我们可以用 = 等号,建立立定义的变量名字和对象之间的引用关系,也可以用使用 del 来解除这种引用关系。
# 举个例子
name = '天下第一帅' # 我将 天下第一帅 这个字符串赋值给了 name 这个变量名,可以理解为,下次我通过 name 名字可以联系到 天下第一帅 这个人.
实际操作 />
# del 解除引用关系
age = 17 # 永远17岁
del age # del 是 delete 的缩写,此行代码表示删除 age 和 17 之间的引用关系
print(age) # 因为已经删除引用关系,所以访问不到 17 这个数据,则抛出异常
实际操作 />
名字空间
当我们在定义了一些变量名,函数名,类名之后,会有一个空间来收纳这些名字和它们所对应的数据类型和数据内容。
# 举个栗子
height = '190CM' # 小编的理想身高.但是现实很残酷.
def func1():
pass
class Fun():
pass
实际操作 />
使用 %whos 查看名字空间,我们也可以使用 %reset 来清空这个空间,清空之后,我们就需要重新执行一次定义的过程,才能重新存储在名字空间内。
实际操作 />
4. 语法基础:输出
普通的输出 />
python中的输出
用 print() 在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出 '李铁柱',用代码实现如下:
name = '李铁柱'
print(name)
运行结果 />
print()也可以打印整数,或者计算结果
# 举个例子
print(300)
print(100 + 200)
实际操作 />
因此,我们可以把计算100 + 200 的结果打印得更漂亮一点:
print('100 + 200 = ', 100 + 200)
实际操作 />
注意,对于100 + 200,Python 解释器自动计算出结果 300,但是,'100 + 200 =' 是字符串而非数学公式,Python 把它视为字符串,直接进行打印输出。
5. 语法基础:格式化输出
格式化操作的目的,比如说有下列代码:
print('大家好,我叫 李铁柱,我今年 24 岁')
print('大家好,我叫 候德柱,我今年 25 岁')
print('大家好,我叫 候不柱,我今年 26 岁')
大家仔细观察一下,能够看到,我在 print 输出自我介绍的时候,用了很多的相同字体,就只有一些不同的字段,那么咱们能否简化一下程序呢?
age = 24
print("我今年%d岁" % age)
age += 25
print("我今年%d岁" % age)
age += 26
print("我今年%d岁" % age)
实际操作 />
在程序中,看到了 % 这样的操作符,这就是 Python 中格式化输出。
age = 18
name = "小岳岳"
print("我的姓名是%s, 年龄是%d" % (name, age))
运行结果 />
在这里咱们一次使用了两个格式化符号,分别是:%s 和 %d。
%s:表示格式化输出字符串
%d:表示格式化输出十进制整数
除了这两个格式化输出字符还有很多,往下看。
常用的格式化符号 />
6. 语法基础:输入
现在,你已经可以用 print() 输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python 提供了一个 input(),可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:
name = input() # input()
当你输入name = input()并按下回车后,Python交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。
输入完成后,不会有任何提示,Python 交互式命令行又回到就绪状态了。那我们刚才输入的内容到哪去了?答案是存放到 name 变量里了。可以直接输入 name 查看变量内容: /> />
7. 语法基础:运算符
标准操作符
python 同大多数语言一样,也有自己的操作符,分别用来应对不同的工作内容。今天要讲的是 Python 中最常用的几种标准操作符:算术运算符、赋值运算符、比较运算符、逻辑运算符。
算数运算符 />
注意:混合运算时,优先级顺序为: ** 高于 * / % // 高于 + - ,为了避免歧义,建议使用 () 来处理运算符优先级。并且,不同类型的数字在进行混合运算时,整数将会转换成浮点数进行运算。
实际操作
a = 10
b = 20
print(a+b)
print(a-b)
print(a*b)
print(a/b)
赋值运算符 />
实际操作
a = 10 # 单个赋值
b = 20
c,d,e = 30,40,50 # 多个赋值 c = 30 , d = 40 , e = 50
print(a,b,c,d,e)
复合赋值运算符 />
实际操作
c = 40
a = 20
# print(c += a) # 直接 print() 是无法输出结果的哟
c += a
print(c)
c -= a
print(c)
c *= a
print(c)
c /= a
print(c)
c %= a
print(c)
8.语法基础:常用的数据类型转换
数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。 />
类型转换
# 给小伙伴们举几个例子
# int(): 将数据转换为 int 类型
str1 = "10"
num1 = int(str1)
print(int)
# int() 处理浮点数,只留下整数部分,舍弃小数部分(并不是四舍五入操作)
num2 = int(3.74)
print(num2)
# float() 将数据转化为浮点数
str2 = "3.14"
f1 = float(str2)
print(type(f1))
# str() : 转换为 字符串类型
num1 = 10
f1 = 3.14
print(type(str(num1)))
# eval(): 将字符串形式的数据,转换为原本的类型
str1 = "3.14"
print(type(eval(str1)))
操作结果
四、对象
1.什么是对象在python中一切都是对象,每个对象都有三个属性分别是,(id)身份,就是在内存中的地址,类型(type),是int、字符、字典(dic)、列表(list)等,最后还有值。
例如: a = 12 就是用 12 这个类型为整数的,值为 12,在内存空间中创建了一个空间(这个空间会用一个地址来表示,就是 id ),当对象被创建后,如果该对象的值可以被更改,那么就称之为可变对象(mutable),如果值不可更改,就称之为不可变对象(inmutable)。
2.不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。不可变对象:整数int、浮点数float、字符串str、元组tuple
举例说明:
a = 5
print(id(a))
a = 4
print(id(a)) # 重新赋值之后,内存地址发生改变
实际操作: />
由于是不可变对象,变量对应内存的值不允许被改变。当变量要改变时,实际上是把原来的值复制一份后再改变,开辟一个新的地址,变量 a 再指向这个新的地址(所以前后变量 a 的id不一样),原来变量 a 对应的值 5 因为不再有对象指向它,就会被垃圾回收。这对于 str 和float 类型也是一样的。
3.小整数池整数在程序中的使用非常广泛, python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间.
Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于 LEGB中 的哪个位置,所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。
# 举个栗子
a=-5
b=-5
a is b:True
a=1000
b=1000
a is b:False
实际操作: />
4.可变对象可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。可变对象:列表list、字典dict、集合set
举例说明
# 举个例子
list1 = [1,2,3,4]
print(list1)
print(id(list1)) # 打印 id 地址
list1[2] = 5 # 对列表进行改值操作
print(list1) # 打印改值之后的列表内容
print(id(list1)) # 打印改值之后的 id 地址
实际操作 />列表 list 在改变前后 id 并未发生改变,可变对象由于所指对象可以被修改,所以无需复制一份之后再改变,直接原地改变,所以不会开辟新的内存,改变前后 id 不变。
5.编码编码(encoding)就是把一个字符映射到计算机底层使用的二进制码。编码方案(encoding scheme)规定了字符串是如何编码的。
ASCII码:美国信息互换标准代码,是一种7位编码方案来表示所有的大写字母、小写字母、数字、标点符号和控制字符。 />
UNICODE万国码:Unicode 是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。
UTF-8码UTF-8 是以 8 位为单元对 Unicode 进行编码。UTF-8 包含全世界所有国家需要用到的字符,是国际编码,通用性强。
6.bytes与str使用 bytes 类型,实质上是告诉 Python ,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。Python 已经严格区分了 bytes 和 str 两种数据类型,你不能在需要 bytes 类型参数的时候使用 str 参数,反之亦然。
编码转换过程 />
7.数据类型 />
8.下标(索引)所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间 />
# 如果想取出部分字符,那么可以通过下标的方法,(注意 python 中下标从 0 开始)
name = 'abcdef'
print(name[0])
print(name[1])
print(name[2])
运行结果:
a
b
c
9.切片切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。切片的语法:[起始:结束:步长]
注意:选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔。
# 我们以字符串为例讲解。如果取出一部分,则可以在中括号[]中,使用:
name = 'abcdef'
print(name[0:3]) # 取 下标0~2 的字符
结果为:
abc
s = 'Hello World!'
print(s[4])
print(s)
print(s[:]) # 取出所有元素(没有起始位和结束位之分),默认步长为1
print(s[1:]) # 从下标为1开始,取出 后面所有的元素(没有结束位)
print(s[:5]) # 从起始位置开始,取到 下标为5的前一个元素(不包括结束位本身)
print(s[:-1]) # 从起始位置开始,取到 倒数第一个元素(不包括结束位本身)
print(s[-4:-1]) # 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身)
print(s[1:5:2]) # 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)
# python 字符串快速逆置
print(s[::-1]) # 从后向前,按步长为1进行取值
# 索引是通过下标取某一个元素
# 切片是通过下标取某一段元素
10.复制(拷贝)python 中有三种赋值方式,分别是:
赋值:=
浅拷贝:copy
深拷贝:deepcopy
赋值:在 Python中,等号 = 是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
所以说,Python 是动态语言,即变量不用指定数据类型。
实际操作: />
图片详解: />
实际操作:
l = [1, 2, 3, 4, [1, 2, 3] ] # 列表中有整数数据类型,也有列表数据类型
new_l = l 对 对象 l 的引用
copy_l = copy.copy(l) 对 对象 l 的浅拷贝
deepcopy_l = copy.deepcopy(l) 对 对象 l 的深拷贝使用 id 这个方法来查看对象的内存地址
l = [1, 2, 3, 4, [1, 2, 3] ] id(l) ---> 1631063137352
new_l = l id(new_l) ---> 1631063137352
copy_l = copy.copy(l) id(copy_l) ---> 1631063137416
deepcopy_l = copy.deepcopy(l) id(deepcopy_l) ---> E1631063026632可以看到,使用 copy 这个模块创建的浅拷贝和深拷贝在内存中都有一个新的内存空间。
进一步查看四个列表中不可变类型的id值:
l = [1, 2, 3, 4, [1, 2, 3] ] id(l[1]) ---> 1400022144
new_l = l id(new_l[1]) ---> 1400022144
copy_l = copy.copy(l) id(copy_l[1]) ---> 1400022144
deepcopy_l = copy.deepcopy(l) id(deepcopy_l[1]) ---> 1400022144再查看可变类型的id值:
列表[-1] : 表示最后一个这个列表中的元素
l = [1, 2, 3, 4, [1, 2, 3] ] id(l[-1]) ---> 1631063137544
new_l = l id(new_l[-1]) ---> 1631063137544
copy_l = copy.copy(l) id(copy_l[-1]) ---> 1631063137544
deepcopy_l = copy.deepcopy(l) id(deepcopy_l[-1]) --->1631063186312可以看到,浅拷贝是不会对 l 中的数据结构进行深层次的拷贝的。也就是说,我要是在 l 列表,更改了 l[-1][索引] 列表其中的一个值,那么 copy_l 中的最后一个元素中的值是会跟着改变的,因为他跟 l 引用的地址是同一个,而 deepcopy_l 的值是不会变的。
浅拷贝 copy:浅拷贝是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容。
深拷贝 deepcopy:深拷贝是对于一个对象所有层次的拷贝(递归,相当于克隆了一下,产生了新的数据)。
浅拷贝对不可变类型和可变类型的 copy 不同
copy.copy对于可变类型(列表、字典),会进行浅拷贝。
copy.copy对于不可变类型(元祖、数字、字符串),不会拷贝,仅仅是指向。
基本上只要不是我们自已手动调用的 deepcopy 方法都是浅拷贝。
10.列表推导式所谓的列表推导式,就是指的轻量级循环创建列表
格式 : [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
实际操作: />
五、字符串
1.字符串的格式定义变量 num,存储的是数字类型的值
num = 22定义变量 name,存储的是字符串
name = 'hello july'
总结:双引号或者单引号里面的数据就是字符串
2.字符串输出举个栗子
name = '英雄联盟'
kind = '游戏'
address = '王者峡谷'
print('**************************************************')
print("姓名:%s" % name)
print("种类:%s" % kind)
print("公司地址:%s" % address)
print('**************************************************')
实际操作: />哈哈,接下来给你们看个好玩的~~. />
3.字符串输入咱们之前在学习 input 输入的时候,通过它能够完成从键盘获取数据,然后保存到指定的变量中;
注意:input 获取的数据,都以字符串的方式进行保存,即使输入的是数字,那么也是以字符串方式保存
userName = input('请输入用户名:') # 命名规范 userName 简单易懂代表用户名字
print("用户名为:%s" % userName)
password = input('请输入密码:')
print("密码为:%s" % password)
实际操作: />
4.下标所谓 “下标”,就是编号,就好比身份证信息中的身份证号码,通过这个号码就能找到相应的人。 />
字符串中"下标"的使用列表与元组支持下标索引好理解,字符串实际上就是字符的数组,所以也支持下标索引。
如果有字符串:name = "http://JULYEDU.COM",在内存中的实际存储如下:
/>
如果你想取出字符串中的某个值,可以通过方括号 [下标索引] 来获取
name = "JULYEDU.COM"
name[0]
name[6]
实际操作: />
5.切片在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python 没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
切片的语法:[ 起始位置 : 结束位置 : 步长 ]
注意:选取的区间从 "起始" 位开始,到 "结束" 位的前一位结束(不包含结束位本身),步长表示选取间隔。
我们以字符串为例讲解。
如果取出一部分,则可以在中括号 [ ] 中,使用:
name = "JULYEDU.COM"
print(name[0:7]) # 取 下标0~7 的字符
运行结果: />更多使用方法:
name = "JULYEDU.COM"
print(name[0:7]) # 取 下标 0~7 的字
print(name[3:5]) # 取 下标 3~5 的字
print(name[3:]) # 取 下标为 3 开始一直到最后的字
print(name[1:-1]) # 取 下标为 1 开始到最后第 2 个之间的字符
print(name[1::2]) # 取 下标为 1 开始一直到最后的字,每两个切一个
运行结果: />
6.字符串常见操作假设咱们现在有个字符串 web = "http://www.julyedu.com",下面就是字符串的常见操作。
find()find : 翻译成中文是查找的意思
检测你需要查找的字符串是否包含在 web 中,如果是则返回开始的索引值,否则返回-1
web.find('july') # 返回下标 4
lower()lower : 翻译成中文是减弱、减小,也可以翻译为小写的
将字符串中,所有大写字符转换成小写字符
name = 'Wo Zui Shuai !'
name.lower() # 结果返回:'wo zui shuai !'
upper()upper : 翻译成中文是上面的、大写的。
将字符串中所有小写转换成大写
name = 'Wo Zui Shuai !'
name.upper() # 返回结果:'WO ZUI SHUAI !'
count()count : 翻译成中文是计算、计数的意思
返回 字符串 在 开始 和 结束 之间 在 web 里面出现的次数
web.count('w') # 返回结果 3 ,表示 w 在 web 值中出现 3 次
index()index : 翻译成中文是指标、指数、索引的意思
跟 find() 方法一样,只不过如果查找的字符串不在 web 中会报一个异常.匹配成功的话也是返回下标值
web.index('a') # 举一个匹配失败得例子 />
split()split : 翻译成中文是分离、分割的意思
以 str 为分隔符切片 web,如果 maxsplit 有指定值,则仅分隔 maxsplit 个子字符串
web.split('.',2) # split(以什么为切割点 ,切割几次)
运行结果: />
replace()replace : 翻译成中文是取代、代替、替换的意思
把 web 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.
web.replace('w','W',2)
运行结果: />
title()title :翻译成中文是标题、冠军、头衔的意思
把字符串的每个单词首字母大写
web.title() # 返回 'Www.Julyedu.Com'
六、列表前面学习的字符串可以用来存储一串信息,那么想一想,如果现在有很多人,总不能每个人都起一个变量名把?那岂不得疯~ />咱们可以使用列表。
1.列表得格式和输出
name = ['杜子腾','史珍香','付书宝','刘币替']
输出列表:
print(name)
print(name[0])
print(name[1])
print(name[2])
运行结果: />
2.列表得循环遍历
使用 for 循环当列表中存储得数据比较多得时候,为了更有效率的输出列表的每个数据,可以使用循环来完成,
name = ['杜子腾','史珍香','付书宝']
for i in name:
print(i)
运行结果: />
使用 while 循环当然也可以使用 while 循环,但是要设置好 while 循环的条件哟,小心不要进入死循环
name = ['杜子腾','史珍香','付书宝']
length = len(name)
i = 0
while i
print(name[i])
i+=1
运行结果: />
3.列表得常见操作列表中存放的数据是可以进行修改的,比如"增"、"删"、"改"、"查",后续咱们还会讲可变对象和不可变对象。列表就是可变对象,请看后面得课程哟
增(append, extend, insert)
append通过 append 可以向列表中添加数据
namelist = ['杜子腾','史珍香','付书宝']
namelist.append('李铁柱')
print(namelist)
运行结果: />
extend通过 extend 可以将另一个集合中的元素逐一添加到列表中
namelist = ['杜子腾','史珍香','付书宝']
name_list = ['李铁柱','李树']
namelist.extend(name_list)
print(namelist)
运行结果: />
insertinsert(index, object) 在指定位置 index 前插入元素 object
namelist = ['杜子腾','史珍香','付书宝']
namelist.insert(1,'付舒宝')
print(namelist)
运行结果: />
删(del, pop, remove)
del根据下标进行删除
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
del movieName[0]
print(movieName)
运行结果: />
pop删除最后一个元素
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.pop()
print(movieName)
运行结果: />
remove根据元素的值进行删除
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.remove('骇客帝国')
print(movieName)
运行结果: />
改(通过下标)修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName[0] = '三傻大闹宝莱坞'
print(movieName)
运行结果: />
查(in, not in)
in如果存在那么结果为true,否则为false
#待查找的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#获取用户要查找的名字
findName = input('请输入要查找的姓名:')
#查找是否存在
if findName in nameList:
print('在字典中找到了相同的名字')
else:
print('没有找到')
运行结果: />
not in如果不存在那么结果为 true,否则false
#待查找的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#获取用户要查找的名字
findName = input('请输入要查找的姓名:')
#查找是否存在
if findName not in nameList:
print('没有找到')
elif findName in nameList:
print('找到了')
运行结果: />not in : 翻译成大白话就是,如果 ....什么什么.... 不在 啥玩意 里面,那么就执行缩进段内的代码。
哈哈,这样一翻译,是不是很通俗易懂了。
七、元组Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
numTuple = (1,2,3,4)
print(numTuple) # 结果为:(1,2,3,4)
1.访问元组访问元组中的数据,也可以通过下标来访问元组
numTuple = (1,2,3,4)
print(numTuple[0]) # 结果为: 1
2.修改元组
numTuple = (1,2,3,4)
numTuple[0] = 5
抛出异常:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
1 numTuple = (1,2,3,4)
----> 2 numTuple[0] = 5
TypeError: 'tuple' object does not support item assignment
元组中的不可变对象是不能被修改的哟.如果里面是列表等可变数据类型的话,可以进行修改.
八、字典在这里咱们仔细想一下哟~,假设有个列表里面存储的是学生的名字。当学生的名字错误,需要修改的时候,可以通过 列表名[索引] 的方式来进行修改,但是如果列表的顺序发生了变化,此时呢就需要修改下标,才能完成名字的修改。
提出疑问:有没有什么方法,既能存储多个数据,还能在访问元素得时候很方便就能够定位到元素呢?
答案:当然是通过接下来要讲得 字典 啦~向下看咯
生活中的字典: />
软件开发中的字典:
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}说明字典和列表一样,也能够存储多个数据。
列表中找某个元素时,是根据下标进行的。
字典中找某个元素时,是根据 '名字'(就是冒号:前面的那个值,例如上面代码中的'name'、'age'、'gender')
字典的每个元素由2部分组成,键:值。例如 'name':'AKing' ,'name'为键,'AKing'为值
1.根据键访问值
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
print(info['name'])
print(info['age'])
运行结果: />若访问的 键名 不存在则抛出异常。
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
print(info['height']) # 访问 info 字典中键名为"height"的值,但是...值呢?他没有值阿。
抛出异常:
--------------------------------------------
Traceback (most recent call last):
File "", line 1, in
KeyError: 'height'
2.修改元素字典的每个元素中的数据是可以修改的,只要通过 key 找到,即可修改
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
new_address = '上海'
info['address'] = new_address
print('修改之后的 address 为: %s' % info['address'])
运行结果: />
3.添加元素如果在使用 字典名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素。
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
# print('id为:%d'%info['id']) # 程序会中断运行,因为访问了不存在的键
id = 6948
info['id'] = id
print('添加之后的id为:%d' % info['id'])
运行结果: />
4.删除元素对字典进行删除操作,有一下几种:
del
clear()
del 删除指定得元素
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
print('删除前,%s' % info['name'])
del info['name'] # 删除之后,值也跟着删除
print('删除后,%s' % info['name'])
运行结果: />
del 删除整个字典
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
del info # del 字典名,这样的话字典的数据就全被删除了
print(info)
运行结果: />
clear 清空整个字典
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
print('清空前,%s' % info)
info.clear() # 字典名.clear() 清空字典中所有键值对数据
print('清空后,%s' % info)
运行结果: />
5.字典的常用方法
len()len : 代表长度 length 的意思
测量字典中,键值对的个数
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
len(info) # 结果为 4
keys()keys :翻译为 键。
返回一个包含字典所有 key 的列表
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
info.keys() # 结果返回列表,存储的都是键名
values()values :意思为复数的 value ,表示为多个值
返回一个包含字典所有 value 的列表
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
info.values() # 结果返回列表,存储的都是 values 值
items()items :表示为所有物品,是 item 的复数形式
返回一个包含所有(键,值)元祖的列表
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
info.items()
运行结果: />
6.字典的遍历通过 for ... in ... 我们可以遍历字符串、列表、元组、字典等
遍历字典的 key 键可以通过 for i in 字典名.keys(): 获取 键名
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
for i in info.keys():
print(i)
运行结果:
/>
遍历字典的 values 值可以通过 for i in 字典名.values(): 获取 值
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
for i in info.values():
print(i)
运行结果:
/>
遍历字典的 items 键值对可以通过 for item in 字典名.items(): 获取 键名和值
info = {'name':'AKing', 'age':25, 'gender':'man', 'address':'北京'}
for item in info.items():
print(item)
运行结果: />
九、三元表达式为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
# 举个栗子
a = 1
b = 2
h = ""
h = a-b if a>b else a+b
print(h)
实际操作: />
执行过程: />
本部分逐步更新中,可以双击屏幕支持一下:)
进阶部分
如果你是小白,不用看进阶部分。可以收藏后继续学上面的教程,或者直接在文末领取免费课程。 />
一个解析51项堪称是“秘密”的Python特性项目,在GitHub上彻底火了。
英文原版已经拿到了近15000星,中文翻译版也获得了7500+星。
这段内容太长了,单独发了一篇文章。七月在线:Python的51个“秘密”被曝光 |GitHub超2万星zhuanlan.zhihu.com
实战+学习的免费课程
原价199元的Python入门课程,限时免费!
没有任何要求,直接领取就可以! />
任何疑问,教师团队随时解答,课程还安排了实战项目。学+练才能高效掌握知识。
虽然是免费课,但教师团队可没有缩水,依旧是BAT高级专家配合顶级高校硕士进行教学。
立刻微信搜索公众号“七月在线实验室”
回复“Python”开始学习
每天更新干货,帮你踏入AI领域成为技术leader。
应届生学员转行拿到52万年薪,大量学员转行后拿到30-40万年薪!
讲师均由各大公司技术leader和国内外顶级高校博士组成!
马上开始学习,和“前辈们”一样进入心仪公司,夺取高薪,成为人生赢家。
也许你面试时的考官就是七月在线的讲师/学员。