Python基础个人学习笔记(自用)

python编程学习入门:

1、python特点

  • 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
  • 2.易于阅读:Python代码定义的更清晰。
  • 3.易于维护:Python的成功在于它的源代码是相当容易维护的。
  • 4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
  • 5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
  • 6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
  • 7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
  • 8.数据库:Python提供所有主要的商业数据库的接口。
  • 9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
  • 10.可嵌入 :你可以将Python嵌入到C/C++程序,让你的程序的用户获得”脚本化”的能力。

2、python安装过程

参考:Python安装教程(新手)_python安装不成功-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_45502336/article/details/109531599?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172255942216800227486120%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172255942216800227486120&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-109531599-null-null.142%5Ev100%5Epc_search_result_base7&utm_term=python%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187

3、第一个程序

print("hello,这是第一个python程序")

运行:hello,这是第一个python程序

4、Python标识符

标识符是允许作为变量(函数、类等)名称的有效字符串。其中,有一部分是关键字(语言本身保留的标识符),它是不能做它用的标识符的,否则会引起语法错误(SyntaxError 异常)。Python 还有称为 built-in 标识符集合,虽然它们不是保留字,但是不推荐使用这些特别的名字。

Python 是动态类型语言, 也就是说不需要预先声明变量的类型。 变量的类型和值在赋值那一刻被初始化。变量赋值通过等号来执行。

Python的有效标识符由大小写字母、下划线和数字组成。数字不能作为第一个字符,标识符的长度不限,Python标识符是大小写敏感的。

在编程语言中,常见的变量命名方式有两种:

  • 驼峰体:

    • DateOfBirth
    • AgeOfBoy
    • ShowMeAI
  • 下划线:

    • date_of_birth
    • age_of_boy
    • show_me_ai

5、python保留字:

下面的图片显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。所有 Python 的关键字只包含小写字母。

5、行的缩进

Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。缩进可使用tab或空格等,空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量。

6、多行语句

Python语句中一般以新行作为语句的结束符。但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:

total = 2 + \
        3 + \
        4
print(total)

输出:9

语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下实例:

days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']
print(days)
输出:['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

7、Python字符串与引号

Python 可以使用引号(  )、双引号(  )、三引号( ‘’’ 或 “”” ) 来表示字符串,引号的开始与结束必须是相同类型的。(更详细的python字符串知识参见python字符串及操作

其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
# 第一个注释
print("这是第二个注释") # 第二个注释
输出:这是第二个注释

注释可以在语句或表达式行末:

name = "ShowMeAI" # 这是一个注释

python 中多行注释使用三个单引号(‘’’)或三个双引号(“””)。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

8、python空行

函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

9、同一行显示多条语句

Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:

import sys; x = 'ShowMeAI'; sys.stdout.write(x + '\
')

输出:ShowMeAI

10、print输出

python3中print默认输出都是换行的,如果要实现不换行需要在变量末尾加上 (, end="')

x="a"
y="b"
# 换行输出
print(x)
print(y)
print('这里是分割线---------')
# 不换行输出
print(x, end='')
print(y, end='')

输出:

a
b
这里是分割线---------
ab
Process finished with exit code 0

11、代码组

缩进相同的一组语句构成一个代码块,我们称之代码组。

像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

12、python的变量类型

Python基本数据类型一般分为6种:数值(Numbers)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set)。本文详细讲解Python中变量赋值、数据类型以及数据类型的转换。

变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。

13、变量赋值

  • Python 中的变量赋值不需要类型声明。

  • 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。

  • 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

  • 等号 = 用来给变量赋值。

多变量赋值

Python允许你同时为多个变量赋值。例如:

a = b = c = d = 3
print(a, b, c, d)
输出:
3 3 3 3
以上实例,创建一个整型对象,值为3,三个变量被分配到相同的内存空间上。

14、标准数据类型

在内存中存储的数据可以有多种类型。

例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。

Python有最常用的5个标准数据类型:

  • Numbers(数值)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

其中数值类型,在Python支持四种不同的数字类型:

  • int(有符号整型)
  • float(浮点型)
  • bool(布尔型)
  • complex(复数)
a=3.14
print(type(a))
b=3
print(type(b))
c=True
print(type(c))
str="hello"
print(type(str))

输出:

<class 'float'>
<class 'int'>
<class 'bool'>
<class 'str'>

 

15、python字符串

可以使用加号(+)对字符串进行连接,使用星号(*)对字符串进行重复操作。如下

str = 'Hello ShowMeAI!'
print(str) # 输出完整字符串
print(str[0]) # 输出字符串中的第一个字符
print(str[2:5]) # 输出字符串中第三个至第六个之间的字符串
print(str[2:]) # 输出从第三个字符开始的字符串
print(str * 2) # 输出字符串两次
print(str + " Awesome") # 输出连接的字符串

输出:

Hello ShowMeAI!
H
llo
llo ShowMeAI!
Hello ShowMeAI!Hello ShowMeAI!
Hello ShowMeAI! Awesome

16、Python列表

List(列表) 是 Python 中使用最频繁的数据类型。

列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

列表用 [ ] 标识,是 python 最通用的复合数据类型。

列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,下标可以为空表示取到头或尾。

list = [ 'ShowMeAI', 233 , 234, 'show', 23.5 ]
tinylist = [123, 'show']
print(list) # 输出完整列表
print(list[0]) # 输出列表的第一个元素
print(list[1:3]) # 输出第二个至第三个元素
print(list[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tinylist * 2) # 输出列表两次
print(list + tinylist) # 打印组合的列表

输出:

['ShowMeAI', 233, 234, 'show', 23.5]
ShowMeAI
[233, 234]
[234, 'show', 23.5]
[123, 'show', 123, 'show']
['ShowMeAI', 233, 234, 'show', 23.5, 123, 'show']

16、Python元组

元组是另一个数据类型,类似于 List(列表)。

元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

tuple = ( 'ShowMeAI', 233 , 23.4, 'show', 2.35 )
tinytuple = (123, 'show')
print(tuple) # 输出完整元组
print(tuple[0]) # 输出元组的第一个元素
print(tuple[1:3]) # 输出第二个至第四个(不包含)的元素
print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tinytuple * 2) # 输出元组两次
print(tuple + tinytuple) # 打印组合的元组

输出:

('ShowMeAI', 233, 23.4, 'show', 2.35)
ShowMeAI
(233, 23.4)
(23.4, 'show', 2.35)
(123, 'show', 123, 'show')
('ShowMeAI', 233, 23.4, 'show', 2.35, 123, 'show')

以下是元组无效的,因为元组是不允许更新的。而列表是允许更新的:
tuple = ( 'ShowMeAI', 233 , 23.4, 'show', 2.35 )
list=['ShowMeAI', 233 , 23.4, 'show', 2.35]
tuple[2] = 100    # 元组中是非法应用
list[2] = 100     # 列表中是合法应用
print(tuple)
print(list)

输出:Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 45, in <module>
    tuple[2] = 100    # 元组中是非法应用
TypeError: 'tuple' object does not support item assignment

元组中不允许修改,所以我们注释掉它

tuple = ( 'ShowMeAI', 233 , 23.4, 'show', 2.35 )
list=['ShowMeAI', 233 , 23.4, 'show', 2.35]
# tuple[2] = 100    # 元组中是非法应用
list[2] = 100     # 列表中是合法应用
print(tuple)
print(list)

输出:

('ShowMeAI', 233, 23.4, 'show', 2.35)
['ShowMeAI', 233, 100, 'show', 2.35]

17、Python字典

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。

两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典用”{ }”标识。字典由索引(key)和它对应的值value组成。

dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tinydict = {'name': 'ShowMeAI','code':3456, 'dept': 'AI'}

print(dict['one']) # 输出键为'one' 的值
print(dict[2]) # 输出键为 2 的值
print("我在测试",dict)
print(tinydict) # 输出完整的字典
print(tinydict.keys()) # 输出所有键
print(tinydict.values()) # 输出所有值

输出:

This is one
This is two
我在测试 {'one': 'This is one', 2: 'This is two'}
{'name': 'ShowMeAI', 'code': 3456, 'dept': 'AI'}
dict_keys(['name', 'code', 'dept'])
dict_values(['ShowMeAI', 3456, 'AI'])

18、Python数据类型转换

有时候,需要对数据内置的类型进行转换,数据类型的转换,只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

19、Python比较运算符

a=3
b=3
print(a!=b)
print(type(a!=b))

输出:

False
<class 'bool'>

20、Python赋值运算符

21、Python位运算符

 a 为 60,b 为 13

a=0011 1100

b=0000 1101

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a = 1100 0011

a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
c = 0
c = a & b;        # 12 = 0000 1100
print("第1次运算后,c的值为:", c)
c = a | b;        # 61 = 0011 1101
print("第2次运算后,c的值为:", c)
c = a ^ b;        # 49 = 0011 0001
print("第3次运算后,c的值为:", c)
c = ~a;           # -61 = 1100 0011
print("第4次运算后,c的值为:", c)
c = a << 2;       # 240 = 1111 0000
print("第5次运算后,c的值为:", c)
c = a >> 2;       # 15 = 0000 1111
print("第6次运算后,c的值为:", c)

输出:

第1次运算后,c的值为: 12
第2次运算后,c的值为: 61
第3次运算后,c的值为: 49
第4次运算后,c的值为: -61
第5次运算后,c的值为: 240
第6次运算后,c的值为: 15

22、Python逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

a = 10
b = 20
if  a and b :
   print("1.变量 a 和 b 都为 true")
else:
   print("1.变量 a 和 b 有一个不为 true")
if  a or b :
   print("2.变量 a 和 b 都为 true,或其中一个变量为 true")
else:
   print("2.变量 a 和 b 都不为 true")
# 修改变量 a 的值
a = 0
if  a and b :
   print("3.变量 a 和 b 都为 true")
else:
   print("3.变量 a 和 b 有一个不为 true")
if  a or b :
   print("4.变量 a 和 b 都为 true,或其中一个变量为 true")
else:
   print("4.变量 a 和 b 都不为 true")
if not( a and b ):
   print("5.变量 a 和 b 都为 false,或其中一个变量为 false")
else:
   print("5.变量 a 和 b 都为 true")

输出:

1.变量 a 和 b 都为 true
2.变量 a 和 b 都为 true,或其中一个变量为 true
3.变量 a 和 b 有一个不为 true
4.变量 a 和 b 都为 true,或其中一个变量为 true
5.变量 a 和 b 都为 false,或其中一个变量为 false

23、Python成员运算符

Python 还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
   print("1.变量 a 在给定的列表中 list 中")
else:
   print("1.变量 a 不在给定的列表中 list 中")
if ( b not in list ):
   print("2.变量 b 不在给定的列表中 list 中")
else:
   print("2.变量 b 在给定的列表中 list 中")
# 修改变量 a 的值
a = 2
if ( a in list ):
   print("3.变量 a 在给定的列表中 list 中")
else:
   print("3.变量 a 不在给定的列表中 list 中")

输出:

1.变量 a 不在给定的列表中 list 中
2.变量 b 不在给定的列表中 list 中
3.变量 a 在给定的列表中 list 中

24、Python身份运算符

身份运算符用于比较两个对象的存储单元

注: id() 函数用于获取对象内存地址。

is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。

a = [1, 2, 3]
b = a
print(b is a)
print(b == a)
b = a[:]
print(b)
print(b is a)
print(b==a)

输出:

True
True
[1, 2, 3]
False
True

25、Python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符:

a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d       #( 30 * 15 ) / 5
print("(a + b) * c / d 运算结果为:",  e)
e = ((a + b) * c) / d     # (30 * 15 ) / 5
print("((a + b) * c) / d 运算结果为:",  e)
e = (a + b) * (c / d);    # (30) * (15/5)
print("(a + b) * (c / d) 运算结果为:",  e)
e = a + (b * c) / d;      #  20 + (150/5)
print("a + (b * c) / d 运算结果为:",  e)

输出:

(a + b) * c / d 运算结果为: 90.0
((a + b) * c) / d 运算结果为: 90.0
(a + b) * (c / d) 运算结果为: 90.0
a + (b * c) / d 运算结果为: 50.0

26、Python条件语句

在 Python 中,可以使用 if 语句对条件进行判断,然后根据不同的结果(True或者False)执行不同的代码。Python 中的 if 语句可以细分为三种形式: if 语句、if else 语句和 if elif else 语句。

Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。

Python 编程中 if 语句用于控制程序的执行,基本形式为:

if 判断条件:
    执行语句……
else:
    执行语句……

if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。

当判断条件为多个值时,可以使用以下形式:

if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

其中”判断条件”成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句。

flag = False
name = 'ShowMeAI'
if name == 'python':         # 判断变量是否为 python
    flag = True              # 条件成立时设置标志为真
    print('welcome boss')    # 并输出欢迎信息
else:
    print('welcome '+name)    # 条件不成立时输出变量名称

输出:welcome ShowMeAI

num = 6
if num == 3:            # 判断num的值
    print('boss')
elif num == 2:
    print('user')
elif num == 1:
    print('worker')
elif num < 0:           # 值小于零时输出
    print('error')
else:
    print('random')    # 条件均不成立时输出

输出:random

由于 python 并不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。

# if语句多个条件
num = 9
if num >= 0 and num <= 10:    # 判断值是否在0~10之间
    print('hello')
# 输出结果: hello
num = 10
if num < 0 or num > 10:    # 判断值是否在小于0或大于10
    print('hello')
else:
    print('undefine')
# 输出结果: undefine
num = 8
# 判断值是否在0~5或者10~15之间
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):
    print('hello')
else:
    print('undefine')
# 输出结果: undefine

简单的语句组,也可以在同一行的位置上使用if条件判断语句,如下示例

show = 100
if ( show  == 100 ) : print("变量 show 的值为100")
print("Good bye!")

输出:

变量 show 的值为100
Good bye!

27、Python循环语句

程序在一般情况下是按顺序执行的,Python提供了各种控制结构,允许更复杂的执行路径。

循环语句允许我们执行一个语句或语句组多次,下面是在大多数编程语言中的循环语句的一般形式:

while 循环在给定的判断条件为 true 时执行循环体,否则退出循环体。
for 循环重复执行语句
嵌套循环你可以在while循环体中嵌套for循环

28、循环控制语句

循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:

控制语句描述
break 语句在语句块执行过程中终止循环,并且跳出整个循环
continue 语句在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass 语句pass是空语句,是为了保持程序结构的完整性。

29、Python-While循环语句

Python 编程中 while 语句用于循环执行程序,即满足某条件的情况下,循环执行某段程序。其基本形式为:

 while 判断条件(condition):
     执行语句(statements)……

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假 false 时,循环结束。

以下代码演示了Python中的while循环:

count = 0
while (count < 9):
   print('The count is:', count)
   count = count + 1
print("Done!")

输出:

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Done!

while 语句时还有另外两个重要的命令 continue,break 来跳过循环:

  • continue 用于跳过该次循环
  • break 用于退出循环

有时候”判断条件”还可以是个常值,表示循环必定成立,具体用法如下

i = 1
while i < 10:
    i += 1
    if i%2 > 0:     # 非双数时跳过输出
        continue
    print(i)         # 输出双数2、4、6、8、10
i = 1
while 10:            # 循环条件为1必定成立
    i += 1
    if i > 10 and i<20:     # 当i大于10时跳出循环
        print(i)
        continue
    elif i>20:
        break

输出:

2
4
6
8
10
11
12
13
14
15
16
17
18
19

30、Python-for循环语句

for循环的语法格式如下:

for iterating_var in sequence:
   statements(s)

for x in 'GOOD':     # 第一个实例
   print("当前字母: %s" % x)
fruits = ['banana', 'apple',  'mango']
for y in fruits:        # 第二个实例
   print('当前水果: %s'% y)
print("完成")

输出:

当前字母: G
当前字母: O
当前字母: O
当前字母: D
当前水果: banana
当前水果: apple
当前水果: mango
完成

通过序列索引迭代;另外一种执行循环的遍历方式是通过索引,如下实例:

fruits = ['香蕉', '苹果',  '葡萄']
for x in range(len(fruits)):
   print('当前水果 : %s' % fruits[x])
print("完成!")

输出:

当前水果 : 香蕉
当前水果 : 苹果
当前水果 : 葡萄
完成!

以上实例我们使用了内置函数 len() 和 range(),函数 len() 返回列表的长度,即元素的个数。 range返回一个序列的数。

len()函数返回对象中元素的数量;len()是Python中一个非常有用的内置函数,它提供了一种简单的方式来获取对象的长度或元素的数量。

greeting = "Hello,Hello"
print(len(greeting))

输出:12

range(5)得到的是:0,1,2,3,4 表示从0到4 start和stop表示的范围规则:“前闭后开”,也就是说取不到5

迭代range(1,5)得到的是1,2,3,4 表示从1到4

step 步长,默认为1,表示迭代时的增量(或减量),在使用step时必须要指定第一个参数start

31、循环使用else语句

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

for num in range(20,30):  # 迭代 10 到 20 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print ('%d 等于 %d * %d' % (num,i,j))
         break            # 跳出当前循环
   else:                  # 循环的 else 部分
      print ('%d 是一个质数' % num)

输出:

20 等于 2 * 10
21 等于 3 * 7
22 等于 2 * 11
23 是一个质数
24 等于 2 * 12
25 等于 5 * 5
26 等于 2 * 13
27 等于 3 * 9
28 等于 2 * 14
29 是一个质数

32、经典案例-for循环绘图

我们来使用学习到的for循环,绘制不同的图案,帮助大家进一步熟悉for循环用法

空心等边三角形

rows = int(input('输入列数: '))
print("打印空心等边三角形,这里去掉if-else条件判断就是实心的")
for i in range(0, rows + 1):#变量i控制行数
    for j in range(0, rows - i):#(1,rows-i)#row如果为4,则第一行输出3空格
        print(" ", end='')#不换行输出,换行空格
        j =j + 1
    for k in range(0, 2 * i - 1):#(1,2*i-1),
        if k == 0 or k == 2 * i - 2 or i == rows:
            if i == rows:
                if k % 2 == 0:#因为第一个数是从0开始的,所以要是偶数打印*,奇数打印空格
                    print("*1", end='')
                else:
                    print(" 2", end='')#注意这里的", end='' ",一定不能省略,可以起到不换行的作用
            else:
               print("*3", end='')
        else:
            print(" 4", end='')
        k += 1
    print("\
")
    i += 1 

输出:

  *3
  *3 4*3
 *3 4 4 4*3
*1 2*1 2*1 2*1

菱形

#菱形
print("打印空心等菱形,这里去掉if-else条件判断就是实心的")
rows = int(input('输入列数: '))
for i in range(rows):#变量i控制行数
    for j in range(rows - i):#(1,rows-i)
        print(" ", end='')
        j += 1
    for k in range(2 * i - 1):#(1,2*i)
        if k == 0 or k == 2 * i - 2:
            print("*", end='')
        else:
            print(" ", end='')
        k += 1
    print("\
")
    i += 1
    #菱形的下半部分
for i in range(rows):
    for j in range(i):#(1,rows-i)
        print(" ", end='')
        j += 1
    for k in range(2 * (rows - i) - 1):#(1,2*i)
        if k == 0 or k == 2 * (rows - i) - 2:
            print("*", end='')
        else:
            print(" ", end='')
        k += 1
    print("\
")
    i += 1

输出:

打印空心等菱形,这里去掉if-else条件判断就是实心的
输入列数: 3
   
  *
 * *
*   *
 * *
  *

33、Python-break语句

Python break语句,打破了最小封闭的for或while循环。

break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。

使用 continue 语句,可以跳过执行本次循环体中剩余的代码,转而执行下一次的循环。

在嵌套循环中,break语句将停止执行最深层的循环,可以完全终止当前循环,并开始执行下一循环代码。

for letter in 'Hellohworld':     # 第一个实例
   if letter == 'h':
      print('当前字母 :', letter+letter)
      break
      print('当前字母 :', letter+letter+letter)
   print('当前字母 :', letter)
var = 10                    # 第二个实例
while var > 0:
   print('当前变量值 :', var)
   var = var -1
   if var == 5:   # 当变量 var 等于 5 时退出循环
      print("before break")
      break
      print("after break1")
print("after break2")
print("完成!")

输出:

当前字母 : H
当前字母 : e
当前字母 : l
当前字母 : l
当前字母 : o
当前字母 : hh
当前变量值 : 10
当前变量值 : 9
当前变量值 : 8
当前变量值 : 7
当前变量值 : 6
before break
after break2
完成!

34、Python-continue语句

Python continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环(而break是跳出整个循环)。

continue语句用在while和for循环中。

for letter in 'helloworld':     # 第一个实例
   if letter == 'h':
      continue
   print('当前字母 :', letter)
var = 7                    # 第二个实例
while var > 0:
   var = var -1
   if var == 5:
      continue
   print('当前变量值 :', var)
print("完成!")

输出:

当前字母 : e
当前字母 : l
当前字母 : l
当前字母 : o
当前字母 : w
当前字母 : o
当前字母 : r
当前字母 : l
当前字母 : d
当前变量值 : 6
当前变量值 : 4
当前变量值 : 3
当前变量值 : 2
当前变量值 : 1
当前变量值 : 0
完成!

35、Python-pass语句

Python pass 是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句。

for letter in 'Hellohworld':
   if letter == 'h':
      pass
      print('这是 pass 块')
   print('当前字母 :', letter)
print("完成!")

输出:

当前字母 : H
当前字母 : e
当前字母 : l
当前字母 : l
当前字母 : o
这是 pass 块
当前字母 : h
当前字母 : w
当前字母 : o
当前字母 : r
当前字母 : l
当前字母 : d
完成!

36、Python字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号(‘或”)来创建字符串。

37、Python访问字符串中的值

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。Python 访问子字符串

可以使用方括号配合索引来进行字符串切片。

str1 = 'Hello World!'
str2 = "Python ShowMeAI"
print("str1[0]: ", str1[0]) #index为0的字符
print("str2[1:5]: ", str2[1:5]) #从index为1开始到5结束(不包含5)

输出:

str1[0]:  H
str2[1:5]:  ytho

38、Python字符串连接

可以对字符串进行截取并与其他字符串进行连接

str1 = 'Hello World!'
print("输出 :", str1[:6] + 'ShowMeAI!')

输出 : Hello ShowMeAI!

39、Python转义字符

在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:

转义字符描述
(在行尾时)续行符
\反斜杠符号,代码行换行
\’单引号
\”双引号
\a响铃
\b退格(Backspace)
\e转义
\000
\n   
换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
\xyy十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

40、Python字符串运算符

下表实例变量 a 值为字符串 “Hello”,b 变量值为 “Python”:

操作符描述实例
+字符串连接>>>a + b ‘HelloPython’
*重复输出字符串>>>a * 2 ‘HelloHello’
[]通过索引获取字符串中字符>>>a[1] ‘e’
[ : ]截取字符串中的一部分>>>a[1:4] ‘ell’
in成员运算符 - 如果字符串中包含给定的字符返回 True>>>”H” in a True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True>>>”M” not in a True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
原始字符串除在字符串的第一个引号前加上字母”r”(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
>>>print r’\
a='hello'
b='world'
print(a+b)
print(a*2)
print(a[1])
print(a[1:4])
print('h' in a)
print('m' not in a)
print('m' in a)
print('\r')

输出:

helloworld
hellohello
e
ell
True
True
False

41、Python字符串格式化

Python 支持格式化字符串的输出。

(1)基础用法

最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print("The website is %s and the author's age is %d!" % ('A1', 21) )

输出:The website is A1 and the author's age is 21!

符 号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%F 和 %E 的简写
%p用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
在正数前面显示空格
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%’输出一个单一的’%’
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

(2)format格式化字符串

Python还有一种格式化字符串的函数str.format(),它增强了字符串格式化的功能,基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。

print("{} {}".format("hello", "ShowMeAI"))
print("{0} {1}".format("hello", "ShowMeAI"))
print("{1} {0} {1}".format("hello", "ShowMeAI"))
print("网站名:{name}, 地址 {url}".format(name="B站", url="www.bilibili.com"))
# 通过字典设置参数
site = {"name": "B站", "url": "www.bilibili.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['B站', 'www.bilibili.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

输出:

hello ShowMeAI
hello ShowMeAI
ShowMeAI hello ShowMeAI
网站名:B站, 地址 www.bilibili.com
网站名:B站, 地址 www.bilibili.com
网站名:B站, 地址 www.bilibili.com

format还可以对数字进行格式化,下表展示了 str.format() 格式化数字的多种方法:

print("{:.2f}".format(3.1415926))

输出:3.14

数字格式输出描述
3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}+3.14带符号保留小数点后两位
-1{:+.2f}-1.00带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}05数字补零 (填充左边, 宽度为2)
5{:x<4d}5xxx数字补x (填充右边, 宽度为4)
10{:x<4d}10xx数字补x (填充右边, 宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00e+09指数记法
13{:>10d}13右对齐 (默认, 宽度为10)
13{:<10d}13左对齐 (宽度为10)
13{:^10d}13中间对齐 (宽度为10)
11'{:b}'.format(11)
'{:d}'.format(11)
'{:o}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)
10
11
11
13
b
0xb
0XB
进制

^<> 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格

b、d、o、x 分别是二进制、十进制、八进制、十六进制。

此外我们可以使用大括号 {} 来转义大括号

print("{} 对应的优先级是 {{0}}".format("ShowMeAI"))

输出:ShowMeAI 对应的优先级是 {0}

(3)Python三引号

Python 中三引号可以将复杂的字符串进行赋值。

Python 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

三引号的语法是一对连续的单引号或者双引号

hi = '''hi 
there'''
print(hi)

输出:

hi 
there

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

一个典型的用例是,当你需要一块HTML或者SQL时,这时当用三引号标记,使用传统的转义字符体系将十分费神。

 errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (  
login VARCHAR(8), 
uid INTEGER,
prid INTEGER)
''')

42、Unicode字符串

Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单;若引号前小写的”u”表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:

u1='Hello World !'
u2='Hello\u0020World !'
print(u1)
print(u2)

输出:

Hello World !
Hello World !
被替换的 \u0020 标识表示在给定位置插入编码值为 0x0020 的 Unicode 字符(空格符)

43、python的字符串内建函数

字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。

这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。

方法描述
string.capitalize()把字符串的第一个字符大写
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding=’UTF-8’, errors=’strict’)以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=’UTF-8’, errors=’strict’)以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
string.endswith(obj, beg=0, end=len(string))检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
string.find(str, beg=0, end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format()格式化字符串
string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum()如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal()如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit()如果 string 只包含数字则返回 True 否则返回 False.
string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower()转换 string 中所有大写字符为小写.
string.lstrip()截掉 string 左边的空格
string.maketrans(intab, outtab])maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str)返回字符串 str 中最大的字母。
min(str)返回字符串 str 中最小的字母。
string.partition(str)有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1))把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string) )类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
string.rindex( str, beg=0,end=len(string))类似于 index(),不过是从右边开始.
string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str)类似于 partition()函数,不过是从右边开始查找
string.rstrip()删除 string 字符串末尾的空格.
string.split(str=””, num=string.count(str))以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符串
string.splitlines([keepends])按照行(‘\r’, ‘\r\‘, \‘)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

string.startswith(obj, beg=0,end=len(string))检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
string.strip([obj])在 string 上执行 lstrip()和 rstrip()
string.swapcase()翻转 string 中的大小写
string.title()返回”标题化”的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del=””)根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中.

string.upper()转换 string 中的小写字母为大写
string.zfill(width)返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

string = 'uUUPpp'
print(string.upper())
print(string.capitalize())

输出:

UUUPPP
Uuuppp

44、Python列表(List)

序列是Python中最基本和常见的数据结构。序列中的每个元素都分配一个数字 - 【它的位置,或索引】,第一个索引是0,第二个索引是1,依此类推。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

(1)访问列表中的值

使用下标索引来访问列表中的值,可以使用方括号的形式截取子列表。

list1 = ['python', 'ShowMeAI', 1997, 2022]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])

输出:

list1[0]:  python
list2[1:5]:  [2, 3, 4, 5]

list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] )
print( list[:-2] )
print( list[-3:] )

输出:

black
['red', 'green', 'blue', 'yellow']
['yellow', 'white', 'black']

(2)更新列表

可以对列表的数据项进行修改或更新,也可以使用append()方法来添加列表项,如下所示

list = []          # 空列表
list.append('Google')   # 使用 append() 添加元素
list.append('ShowMeAI')
print(list)

输出:

['Google', 'ShowMeAI']

(3)删除列表元素

可以使用 del 语句来删除列表的元素,如下所示

list1 = ['python', 'ShowMeAI', 1997, 2022]
print(list1)
del list1[2]
print("删除索引为2的元素后 : ")
print(list1)

输出:

['python', 'ShowMeAI', 1997, 2022]
删除索引为2的元素后 : 
['python', 'ShowMeAI', 2022]

(4)Python列表脚本操作符

列表对 + 和 的操作符与字符串相似。+ 号用于组合列表, 号用于重复列表。

如下所示:

Python 表达式结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
[‘Hi!’] * 4[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]重复
3 in [1, 2, 3]True元素是否存在于列表中
for x in [1, 2, 3]: print x,1 2 3迭代

(5)Python列表截取

Python 的列表截取实例如下:

L = ['Google', 'ShowMeAI', 'Baidu']
print(L[2])
print(L[-2])
print(L[1:])

输出:

Baidu
ShowMeAI
['ShowMeAI', 'Baidu']

(6)Python列表函数方法

Python包含以下函数:

序号函数作用
1len(list)列表元素个数
2max(list)返回列表元素中索引值最大的值
3min(list)返回列表元素中索引值最小的值
4list(seq)将元组转换为列表
# 示例1:长度
list1, list2 = [123, 'ShowMeAI', 'google'], [456, 'abc']
print("第1个列表长度 : ", len(list1))
print("第2个列表长度 : ", len(list2))

输出:

第1个列表长度 :  3
第2个列表长度 :  2

# 示例2:最大最小值
list1, list2 = ['Baidu', 'ShowMeAI', 'google'], [456, 789, 200]
print("第1个列表最大值 : ", max(list1))
print("第1个列表最小值 : ", min(list1))
print("第2个列表最大值 : ", max(list2))
print("第2个列表最小值 : ", min(list2))

输出:

第1个列表最大值 :  n
第1个列表最小值 :  Baidu
第2个列表最大值 :  789
第2个列表最小值 :  200

# 示例3:转列表
aTuple = (123, 'ShowMeAI', 'google', 'Baidu');
aList = list(aTuple)
print("列表元素 : ")
print(aTuple)
print(aList)

输出:

列表元素 : 
(123, 'ShowMeAI', 'google', 'Baidu')
[123, 'ShowMeAI', 'google', 'Baidu']

Python包含以下方法:

序号方法作用
1list.append(obj)在列表末尾添加新的对象
2list.count(obj)统计某个元素在列表中出现的次数
3list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4list.index(obj)从列表中找出某个值第一个匹配项的索引位置
5list.insert(index, obj)将对象插入列表
6list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7list.remove(obj)移除列表中某个值的第一个匹配项
8list.reverse()反向列表中元素
9list.sort(cmp=None, key=None, reverse=False)对原列表进行排序
aList = ['Baidu', 'ShowMeAI', 'google']
print("aList : ", aList)
aList.append( 'ByteDance' )
aList += ['ShowMeAI']
print("经过append和+计算后的aList : ", aList)
print("统计ShowMeAI个数 : ", aList.count('ShowMeAI'))
aList.extend(['Taobao', 'Tencent'])
print("经过extend后的aList : ", aList)
print("使用index查找Taobao的索引位置: ", aList.index('Taobao'))
aList.insert( 3, 'DiDi')
print("在index为3的位置insert元素后的aList : ", aList)
print("aList pop出的元素: ", aList.pop())
aList.remove('ShowMeAI')
print("aList用remove删除第1个匹配到的ShowMeAI后: ", aList)
aList.reverse()
print("aList使用reverse逆序后的结果: ", aList)
aList.sort()
print("aList使用sort排序后的结果: ", aList)

输出:

aList :  ['Baidu', 'ShowMeAI', 'google']
经过append和+计算后的aList :  ['Baidu', 'ShowMeAI', 'google', 'ByteDance', 'ShowMeAI']
统计ShowMeAI个数 :  2
经过extend后的aList :  ['Baidu', 'ShowMeAI', 'google', 'ByteDance', 'ShowMeAI', 'Taobao', 'Tencent']
使用index查找Taobao的索引位置:  5
在index为3的位置insert元素后的aList :  ['Baidu', 'ShowMeAI', 'google', 'DiDi', 'ByteDance', 'ShowMeAI', 'Taobao', 'Tencent']
aList pop出的元素:  Tencent
aList用remove删除第1个匹配到的ShowMeAI后:  ['Baidu', 'google', 'DiDi', 'ByteDance', 'ShowMeAI', 'Taobao']
aList使用reverse逆序后的结果:  ['Taobao', 'ShowMeAI', 'ByteDance', 'DiDi', 'google', 'Baidu']
aList使用sort排序后的结果:  ['Baidu', 'ByteDance', 'DiDi', 'ShowMeAI', 'Taobao', 'google']

45、Python元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

tup1 = ('ByteDance', 'ShowMeAI', 1997, 2022)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
# 创建空元组

tup1 = ()
#元组中只包含一个元素时,需要在元素后面添加逗号

tup1 = (50,)

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

(1)访问元组

元组可以使用下标索引来访问元组中的值。

tup1 = ('python', 'ShowMeAI', 1997, 2022)
tup2 = (1, 2, 3, 4, 5, 6, 7)
print("tup1[0]: ", tup1[0])
print("tup2[1:5]: ", tup2[1:5])

输出:

tup1[0]:  python
tup2[1:5]:  (2, 3, 4, 5)

(2)修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print(tup3)

输出:

(12, 34.56, 'abc', 'xyz')

(3)删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,

tup = ('python', 'ShowMeAI', 1997, 2022)
print(tup)
del tup
print("删除tup后 : ")
print(tup)

输出:

('python', 'ShowMeAI', 1997, 2022)
删除tup后 : 
Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 527, in <module>
    print(tup)
NameError: name 'tup' is not defined

(4)元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式结果描述
len((1, 2, 3))3计算元素个数
(1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)连接
(‘Hi!’,) * 4(‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’)复制
3 in (1, 2, 3)True元素是否存在
for x in (1, 2, 3): print x,1 2 3迭代

(5)元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素。

(6)无关闭分隔符

任意无符号的对象,以逗号隔开,默认为元组,如下实例:

print('abc', -4.24e93, 18+6.6j, 'xyz')
x, y = 1, 2
print("Value of x , y : ", x,y)

输出:

abc -4.24e+93 (18+6.6j) xyz
Value of x , y :  1 2

(7)元组内置函数

Python元组包含了以下内置函数

序号方法作用
1cmp(tuple1, tuple2)比较两个元组元素。
2len(tuple)计算元组元素个数。
3max(tuple)返回元组中元素最大值。
4min(tuple)返回元组中元素最小值。
5tuple(seq)将列表转换为元组。

46、Python字典(Dictionary)

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

dict = {'a': 1, 'b': 2, 'b': '3'}
print(dict['b'])

输出:3

键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

dict = {'a': 1, 'b': 2, 'b': '3'}
print(dict['b'])
print(dict)

输出:

3
{'a': 1, 'b': '3'}

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组

dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict2 = { 'abc': 123, 98.6: 37, (1,2):345 }
print(dict1['Alice'])
print(dict1['Beth'])
print(dict1['Cecil'])
print(dict2['abc'])

输出:

2341
9102
3258
123

(1)访问字典里的值

dict = {'Name': 'ShowMeAI', 'Color': 'Blue', 'Class': 'First'}
print("dict['Name']: ", dict['Name'])
print("dict['Color']: ", dict['Color'])

输出:

dict['Name']:  ShowMeAI
dict['Color']:  Blue

(2)修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值如下代码示例

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8 # 更新
dict['School'] = "ShowMeAI" # 添加
print("dict['Age']: ", dict['Age'])
print("dict['School']: ", dict['School'])

输出:

dict['Age']:  8
dict['School']:  ShowMeAI

(3)删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name']  # 删除键是'Name'的条目
dict.clear()      # 清空字典所有条目
del dict          # 删除字典
print("dict['Age']: ", dict['Age'])
print("dict['School']: ", dict['School'])

输出:

Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 558, in <module>
    print("dict['Age']: ", dict['Age'] )
TypeError: 'type' object is not subscriptable

(4)字典键的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会更新前一个,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'ShowMeAI'}
print("dict['Name']: ", dict['Name'])

输出:

dict['Name']:  ShowMeAI

2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:

dict = {['Name']: 'Zara', 'Age': 7}
print("dict['Name']: ", dict['Name'])

输出:

Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 564, in <module>
    dict = {['Name']: 'Zara', 'Age': 7}
TypeError: unhashable type: 'list'

(5)字典内置函数与方法

Python字典包含了以下内置函数:

函数及描述作用
cmp(dict1, dict2)比较两个字典元素。
len(dict)计算字典元素个数,即键的总数。
str(dict)输出字典可打印的字符串表示。
type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。

Python字典包含了以下内置方法:

函数及描述作用
dict.clear()删除字典内所有元素
dict.copy()返回一个字典的浅复制
dict.fromkeys(seq[, val])创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
dict.has_key(key)如果键在字典dict里返回true,否则返回false
dict.items()返回可遍历的(键, 值) 元组数组的视图对象
dict.keys()返回一个字典所有的键的视图对象
dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
dict.update(dict2)把字典dict2的键/值对更新到dict里
dict.values()返回字典中的所有值的视图对象
pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem()返回并删除字典中的最后一对键和值。

47、Python集合

集合(Set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

(1)集合的基本操作

(1)添加元素

语法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

company = set(("Google", "ShowMeAI", "Taobao"))
company.add("Facebook")
print(company)

输出:{'Taobao', 'Facebook', 'Google', 'ShowMeAI'}

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

s.update(x)

x 可以有多个,用逗号分开。

company = set(("Google", "ShowMeAI", "Taobao"))
company.update({"Facebook", "LinkedIn"})
print(company)
company.update([1,4],[5,6])
print(company)

输出:{'Facebook', 'Taobao', 'LinkedIn', 'Google', 'ShowMeAI'}
{1, 4, 'Taobao', 5, 'LinkedIn', 6, 'Google', 'ShowMeAI', 'Facebook'}

(2)移除元素

语法格式如下:

s.remove(x)

将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

company = set(("Google", "ShowMeAI", "Taobao"))
company.remove("Taobao")
print(company)

输出:{'Google', 'ShowMeAI'}

company.remove("Facebook")

输出:

Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 580, in <module>
    company.remove("Facebook")
KeyError: 'Facebook'

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

s.discard(x)
company = set(("Google", "ShowMeAI", "Taobao"))
company.discard("Facebook")
print(company)

输出:{'Google', 'ShowMeAI', 'Taobao'}

我们也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop()
company = set(("Google", "ShowMeAI", "Taobao", "Facebook"))
x = company.pop()
print(x)

输出:ShowMeAI

多次执行测试结果都不一样。

set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。


(3)计算集合元素个数

语法格式如下:

len(s)

计算集合 s 元素个数。

company = set(("Google", "ShowMeAI", "Taobao", "Facebook"))
print(len(company))

输出:4

(4)清空集合

语法格式如下:

s.clear()

清空集合 s。

company = set(("Google", "ShowMeAI", "Taobao", "Facebook"))
company.clear()
print(company)

输出:set()

(5)判断元素是否在集合中存在

语法格式如下:

x in s

判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

company = set(("Google", "ShowMeAI", "Taobao", "Facebook"))
print("Facebook" in company)

输出:True

(6)集合内置方法完整列表

方法描述
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
difference()返回多个集合的差集
difference_update()移除集合中的元素,该元素在指定的集合也存在。
discard()删除集合中指定的元素
intersection()返回集合的交集
intersection_update()返回集合的交集。
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset()判断指定集合是否为该方法参数集合的子集。
issuperset()判断该方法的参数集合是否为指定集合的子集
pop()随机移除元素
remove()移除指定元素
symmetric_difference()返回两个集合中不重复的元素集合。
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union()返回两个集合的并集
update()

给集合添加元素

48、Python函数

(1)定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
def AorB (a,b):
    if a > b:
        return a
    else:
        return b
print(AorB(6,3))

输出:6

计算面积函数,如下为示例代码

# 计算面积函数
def a_area(width, height):
    return width * height
def a_welcome(name):
    print("Welcome", name)
a_welcome("ShowMeAI")
w = 4
h = 5
print("width =", w, " height =", h, " area =", a_area(w, h))

输出:

Welcome ShowMeAI
width = 4  height = 5  area = 20

(2)函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行

# 定义函数
def print_myself(str):
   # 打印任何传入的字符串
   print (str)
   return
# 调用函数
print_myself("调用用户自定义函数!")
print_myself("再次调用同一函数")

输出:

调用用户自定义函数!
再次调用同一函数

(3)参数传递

在 python 中,类型属于对象,变量是没有类型的:

a=[1,2,3]
a="ShowMeAI"

[1,2,3] 是 List 类型,“ShowMeAI” 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

(4)可更改(mutable)与不可更改(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  • 不可变类型:变量赋值 a=10 后再赋值 a=5,这里实际是新生成一个 int 值对象 5,再让 a 指向它,而 10 被丢弃,不是改变 a 的值,相当于新生成了 a。
  • 可变类型:变量赋值 l=[1,2,3,4] 后再赋值 l[2]=5 则是将 list l 的第三个元素值更改,本身l没有动,只是其内部的一部分值被修改了。

python 函数的参数传递

  • 不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 func(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 func(a) 内部修改 a 的值,则是新生成一个 a 的对象。
  • 可变类型:类似 C++ 的引用传递,如 列表,字典。如 func(l),则是将 l 真正的传过去,修改后 func 外部的 l 也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

(5)python传不可变对象实例

通过 id() 函数来查看内存地址变化:

def my_change(a):
    print(id(a))   # 指向的是同一个对象
    a=10
    print(id(a))   # 一个新对象
a=5
print(id(a))
my_change(a)

输出:

140730102650768
140730102650768
140730102650928

可以看见在调用函数前后,形参和实参指向的是同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id。

(6)传可变对象实例

可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。如下为示例代码

def change_list(mylist):
# "修改传入的列表"
   mylist.append([1,2,3,4])
   print("函数内取值:",mylist)
   return
# 调用changeme函数
mylist=[10,20,30]
change_list(mylist)
print("函数外取值:",mylist)

输出:

函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]

(7)参数

以下是调用函数时可使用的正式参数类型:

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数

(8)必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

调用 print_myself() 函数,你必须传入一个参数,不然会出现语法错误:

def print_myself( str ):
  # "打印任何传入的字符串"
   print(str)
   return
# 调用 print_myself 函数,不加参数会报错
print_myself()

输出:Traceback (most recent call last):
  File "C:/Users/Apple/PycharmProjects/pythonProject2/sTudy.py", line 650, in <module>
    print_myself()
TypeError: print_myself() missing 1 required positional argument: 'str'

(9)关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

以下实例在函数 print_myself() 调用时使用参数名:

def print_myself( str ):
   #"打印任何传入的字符串"
   print(str)
   return
#调用print_myself函数
print_myself( str = "大家周五下午好!")

输出:大家周五下午好!

以下示例代码中演示了函数参数的使用不需要使用指定顺序:

def print_info(name,age):
   #"打印任何传入的字符串"
   print ("名字:",name)
   print ("年龄:",age)
   return
#调用print_info函数
print_info( age=30, name="ShowMeAI")

输出:

名字:  ShowMeAI
年龄:  30

(10)默认参数

调用函数时,如果没有传递参数,则会使用默认参数。以下代码中如果没有传入 age 参数,则使用默认值:

def print_info(name,age = 35 ):
#"打印任何传入的字符串"
   print ("名字: ",name)
   print ("年龄: ",age)
   return
#调用print_info函数
print_info(age=30,name="M1")
print("------------------------")
print_info(name="M2")

输出:
名字:  M1
年龄:  30
------------------------
名字:  M2
年龄:  35

(11)不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:

def function_name([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

def print_info(arg1,*vartuple):
   # "打印任何传入的参数"
   print("输出:")
   print(arg1)
   print(vartuple)
# 调用print_info 函数
print_info(100,90,80)
输出:
100
(90, 80)

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下代码:

def print_info(arg1,*vartuple):
   # "打印任何传入的参数"
   print("输出:")
   print(arg1)
   for var in vartuple:
      print (var)
      print(vartuple)
   return
# 调用printinfo 函数
print_info(100)
print_info(90,80,70)

输出: 
100
输出: 
90
80
(80, 70)
70
(80, 70)

还有一种就是参数带两个星号 **基本语法如下:

def function_name([formal_args,] **var_args_dict ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了两个星号 ** 的参数会以字典的形式导入。

def print_info( arg1, **vardict ):
   # "打印任何传入的参数"
   print("输出: ")
   print(arg1)
   print(vardict)
# 调用print_info 函数
print_info(1, a=2,b=3)

输出: 
1
{'a': 2, 'b': 3}

声明函数时,参数中星号 * 可以单独出现,例如:

def f(a, b, *, c):
   return a + b + c
a=1
b=2
print(f(a,b,c=3))

输出:6

如果单独出现星号 * 后的参数必须用关键字传入。

def f(a,b,*,c):
   return a+b+c
f(1,2,c=3) # 正常
# f(1,2,3)   # 报错

(12)匿名函数

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法:lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

实例:

my_sum = lambda arg1, arg2: arg1 + arg2
# 调用my_sum函数
print ("相加后的值为 : ", my_sum( 10, 20 ))
print ("相加后的值为 : ", my_sum( 20, 20 ))

输出:

相加后的值为 :  30
相加后的值为 :  40

(13)return语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:

def my_sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print("函数内 : ", total)
   return total
# 调用sum函数
total = my_sum( 10, 20 )
print("函数外 : ", total)

输出:

函数内 :  30
函数外 :  30


(14)强制位置参数

Python3.8+ 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:

def f(a, b, /, c, d, *, e, f):
   print(a, b, c, d, e, f)

以下使用方法是正确的:

f(10, 20, 30, d=40, e=50, f=60)

以下使用方法会发生错误:

f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)           # e 必须使用关键字参数的形式

49、迭代器与生成器

(1)Python迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

迭代器有两个基本的方法:iter() 和 next(),从Python3开始,要用__iter__和__next__。

字符串,列表或元组对象都可用于创建迭代器:

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
print(next(it))   # 输出迭代器的下一个元素1
print(next(it))   # 输出迭代器的下一个元素2

输出:

1
2

迭代器对象可以使用常规for语句进行遍历

l=['Baidu', 'ShowMeAI', 'google', 'ByteDance']
it = iter(l)    # 创建迭代器对象
for x in it:
  print(x)

执行以上程序,输出结果如下:

Baidu
ShowMeAI
google
ByteDance

也可以使用 next() 函数

list=['Baidu', 'ShowMeAI', 'google', 'ByteDance']
it = iter(list)    # 创建迭代器对象
while True:
    try:
        print(next(it))
    except StopIteration:
        break

执行以上程序,输出结果如下:

Baidu
ShowMeAI
google
ByteDance

(2)创建一个迭代器

把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。

如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。

iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。

next() 方法(Python 2 里是 next())会返回下一个迭代器对象。

创建一个返回数字的迭代器,初始值为 1,逐步递增 1

class IterNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    x = self.a
    self.a += 1
    return x
num_class = IterNumbers()
iter_num = iter(num_class)
print(next(iter_num))
print(next(iter_num))
print(next(iter_num))
print(next(iter_num))
print(next(iter_num))
print(next(iter_num))

输出:

1
2
3
4
5
6

(3)StopIteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

在 4 次迭代后停止执行

class IterNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    if self.a <= 4:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
num_class = IterNumbers()
iter_num = iter(num_class)
for x in iter_num:
  print(x)

输出:

1
2
3
4

(4)生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列

def fibonacci(n):  # 生成器函数 - 斐波那契
  # a, b, counter = 0, 1, 0
  a=0
  b=1
  counter=0
  while True:
    if(counter>n):
      return
    yield a
    # a, b = b, a + b
    a=b
    b=a+b
    counter += 1

f = fibonacci(10)  # f 是一个迭代器,由生成器返回生成
while True:
  try:
    print(next(f))
  except StopIteration:
    break

输出:

0
1
2
4
8
16
32
64
128
256
512

50、数据结构

(1)Python列表

Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。

以下是 Python 中列表的方法:

方法描述
list.append(x)把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。
list.extend(L)通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
list.insert(i, x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x)删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.clear()移除列表中的所有项,等于del a[:]。
list.index(x)返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x)返回 x 在列表中出现的次数。
list.sort()对列表中的元素进行排序。
list.reverse()倒排列表中的元素。
list.copy()返回列表的浅复制,等于a[:]。
a = [2, 123, 123, 1, 1234.5]
print('''a.count(123), a.count(1), a.count('x'),a.count(2)''')
print(a.count(123), a.count(1), a.count('x'), "\
",a.count(2))
a.insert(2, -1)
print('''a.insert(2, -1)''')
print(a, "\
")
a.append(456)
print('''a.append(456)''')
print(a, "\
")
a.index(456)
print('''a.index(456)''')
print(a.index(456), "\
")
a.remove(456)
print('''a.remove(456)''')
print(a, "\
")
a.reverse()
print('''a.reverse()''')
print(a, "\
")
a.sort()
print('''a.sort()''')
print(a, "\
")

输出:

a.count(123), a.count(1), a.count('x'),a.count(2)
2 1 0  1
a.insert(2, -1)
[2, 123, -1, 123, 1, 1234.5] 
a.append(456)
[2, 123, -1, 123, 1, 1234.5, 456] 
a.index(456)

a.remove(456)
[2, 123, -1, 123, 1, 1234.5] 
a.reverse()
[1234.5, 1, 123, -1, 123, 2] 
a.sort()
[-1, 1, 2, 123, 123, 1234.5] 

注意:类似 insert, remove 或 sort 等修改列表的方法没有返回值。

列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。

stack = ['Baidu', 'ShowMeAI', 'google']
stack.append('ByteDance')
stack.append('Tencent')
print(stack)
stack.pop()
print('''stack.pop()''')
print(stack, "\
")
stack.pop()
print('''stack.pop()''')
print(stack, "\
")
stack.pop()
print('''stack.pop()''')
print(stack, "\
")

输出:

['Baidu', 'ShowMeAI', 'google', 'ByteDance', 'Tencent']
stack.pop()
['Baidu', 'ShowMeAI', 'google', 'ByteDance'] 
stack.pop()
['Baidu', 'ShowMeAI', 'google'] 
stack.pop()
['Baidu', 'ShowMeAI'] 

(2)将列表当做队列使用

也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

from collections import deque
queue = deque(['Baidu', 'ShowMeAI', 'google'])
queue.append('ByteDance')
queue.append('Tencent')
print(deque)
print('''queue.popleft()''')
print(queue.popleft(), "\
")
print('''queue.popleft()''')
print(queue.popleft(), "\
")
print(deque)

输出:

<class 'collections.deque'>
queue.popleft()
Baidu 
queue.popleft()
ShowMeAI 
<class 'collections.deque'>

备注:Python collections模块之deque()详解具体看这个Python collections模块之deque()详解_python collections.deque-CSDN博客

(3)列表推导式

列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

vec = [1, 2, 3]
# 将列表中每个数值乘三,获得一个新的列表:
three_times_vec = [3*x for x in vec]
print(three_times_vec)
# 将列表中每个数值平方,并和原始值组成列表后再组成新的列表:
cmp_x_square = [[x, x**2] for x in vec]
print(cmp_x_square)

输出:[3, 6, 9]
[[1, 1], [2, 4], [3, 9]]

列表推导式还可以用来对序列里每一个元素都调用某函数方法:

fruits = ['banana', 'loganberry', 'apple']
print([x.upper() for x in fruits])
# fruits = ['banana', 'loganberry', 'apple']
# print([fruit.upper() for fruit in fruits])

输出:['BANANA', 'LOGANBERRY', 'APPLE']

还可以组合两个列表去使用列表推导式构建更复杂的结果

vec1 = [1, 2, 3]
vec2 = [4, 5, 6]
print([x*y for x in vec1 for y in vec2]) #两两相乘得到新列表
# 结果[4, 5, 6, 8, 10, 12, 12, 15, 18]
print([x+y for x in vec1 for y in vec2]) #两两相加得到新列表
# 结果[5, 6, 7, 6, 7, 8, 7, 8, 9]
print([vec1[i]*vec2[i] for i in range(len(vec1))]) #对应位置相乘得到新列表
# 结果[4, 10, 18]

输出:

[4, 5, 6, 8, 10, 12, 12, 15, 18]
[5, 6, 7, 6, 7, 8, 7, 8, 9]
[4, 10, 18]

(4)嵌套列表解析

Python的列表还可以嵌套。

以下代码展示了3X4的矩阵列表

matrix = [
      [1, 2, 3, 4],
      [5, 6, 7, 8],
      [9, 10, 11, 12],
       ]
# 将3X4的矩阵列表转换为4X3列表:
trans = [[row[i] for row in matrix] for i in range(4)]
print(trans)
# 等价于下列做法,但是上面的方式更简洁
transposed = []
for i in range(4):
   transposed_row = []
   for row in matrix:
      transposed_row.append(row[i])
   transposed.append(transposed_row)
print(transposed)

输出:

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

(5)del语句

使用 del 语句可以从一个列表中依索引而不是值来删除一个元素。这与使用 pop() 返回一个值不同。可以用 del 语句从列表中删除一个切割,或清空整个列表(我们以前介绍的方法是给该切割赋一个空列表)。例如:

a = [1, 2, 3, 456, 789, 1234.5]
del a[0]
print(a)
del a[2:4]
print(a)
del a[:]
print(a)
输出:
[2, 3, 456, 789, 1234.5]
[2, 3, 1234.5]
[]

(6)元组

(7)集合

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。

可以用大括号({})创建集合。注意:如果要创建一个空集合,你必须用 set() 而不是 {} ;后者创建一个空的字典

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # 删除重复的
# 结果{'orange', 'banana', 'pear', 'apple'}
print('orange' in basket )                # 检测成员
# 结果True
print('crabgrass' in basket)
# 结果False
# 以下演示了两个集合的操作
a = set('abracadabra')
b = set('alacazam')
print(a)                                  # a 中唯一的字母
# 结果{'a', 'r', 'b', 'c', 'd'}
print(a - b)                              # 在 a 中的字母,但不在 b 中
# 结果{'r', 'd', 'b'}
print(a | b)                              # 在 a 或 b 中的字母
# 结果{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
print(a & b)                             # 在 a 和 b 中都有的字母
# 结果{'a', 'c'}
print(a ^ b)                             # 在 a 或 b 中的字母,但不同时在 a 和 b 中
# 结果{'r', 'd', 'b', 'm', 'z', 'l'}

输出:

{'pear', 'banana', 'orange', 'apple'}
True
False
{'c', 'a', 'd', 'b', 'r'}
{'b', 'd', 'r'}
{'c', 'a', 'd', 'z', 'm', 'b', 'r', 'l'}
{'c', 'a'}
{'z', 'm', 'b', 'r', 'l', 'd'}

(8)字典

另一个非常有用的 Python 内建数据类型是字典。

序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。

理解字典的最佳方式是把它看做无序的键=>值对集合。在同一个字典之内,关键字必须是互不相同。

一对大括号创建一个空的字典:{}。

company = {'ShowMeAI': 1234, 'Baidu': 5678}
company['guido'] = 4127
print(company)
# 结果{'Baidu': 5678, 'guido': 4127, 'ShowMeAI': 1234}
print(company['ShowMeAI'])
# 结果1234
del company['Baidu']
company['irv'] = 4127
print(company)
# 结果{'guido': 4127, 'irv': 4127, 'ShowMeAI': 1234}
print(list(company.keys()))
# 结果['irv', 'guido', 'ShowMeAI']
print(sorted(company.keys()))
# 结果['guido', 'irv', 'ShowMeAI']
print('guido' in company)
# 结果True
print('ShowMeAI' not in company)
# 结果False

输出:

{'ShowMeAI': 1234, 'Baidu': 5678, 'guido': 4127}
1234
{'ShowMeAI': 1234, 'guido': 4127, 'irv': 4127}
['ShowMeAI', 'guido', 'irv']
['ShowMeAI', 'guido', 'irv']
True
False

构造函数 dict() 直接从键值对元组列表中构建字典。此外,字典推导可以用来创建任意键和值的表达式词典:

print(dict([('ShowMeAI', 1234), ('Baidu', 5678)]))
print({x: x**2 for x in (2, 4, 6)})

输出:

{'ShowMeAI': 1234, 'Baidu': 5678}
{2: 4, 4: 16, 6: 36}

如果关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

print(dict(ShowMeAI=1234, Baidu=5678))

输出:{'ShowMeAI': 1234, 'Baidu': 5678}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值