1、开始写代码 所有代码都在jupyter notebook中运行,下载地址: https://pan.baidu.com/s/18PYD6h5WoT0zd5N8gTfyEA?pwd=hb8m 提取码: hb8m。
1.1、 解释器和编辑器 运行python程序,一般需要一个解释器和编辑器。
解释器:作为高级语言,机器无法直接读懂python代码,要通过解释器来一行一行翻译,把python代码转换成字节码再执行。我们一般说安装python,本质上就是安装python解释器,比如python3.7。
编辑器:一般用pycharm或者vscode或者jupyternotebook;
Pycharm:本质是一个IDE——集成开发环境,拥有代码补全、自动格式化、拼写检查等基础代码功能,还集成了调试器、版本控制工具等。
JupyterNotebook:是以网页的形式打开,可以在浏览器中直接编写和运行代码,代码的运行结果也会直接在代码块下显示,适合科学计算分步骤显示结果,也适合教学使用。
1.2、Pycharm新建项目 https://blog.csdn.net/weixin_43499626/article/details/117222836
1.3、Jupyter Nodebook新建项目 https://blog.csdn.net/cainiao_python/article/details/125567913
1.4、虚拟环境 https://zhuanlan.zhihu.com/p/341481537
Python程序的运行十分依赖库和环境,如果一台电脑上所有Python程序都共用一整个解释器和环境,那整体就会非常臃肿且难以移植,而且新老版本环境之间会相互影响。
Python虚拟环境venv,顾名思义,venv是在一台电脑上互相独立的不同Python环境,包含解释器、库、各种工具和配置文件等,每一个虚拟环境都相互独立、互不影响。
Pycharm新建虚拟环境 https://blog.csdn.net/didi_ya/article/details/120664678
核心是在【新建项目】时,【Python解释器】选择【Virtualenv】。
不需要自己在文件夹中创建激活虚拟环境。
Jupyter Notebook新建虚拟环境 https://blog.csdn.net/m0_49866160/article/details/136378815
1、在目标文件夹中打开cmd,创建一个虚拟环境,以下代码均在cmd中运行。
2、激活虚拟环境
cd myenv/Scripts./activate
4、安装ipykernel,并将虚拟环境加入jupyter
pip install ipykernel python -m ipykernel install --name=your_env_name(虚拟环境名)
3、在虚拟环境激活的情况下,启动 Jupyter Notebook
之后,就可以在网页上操作这个虚拟环境了,这次coding结束要关闭内核,下次再coding要在cmd中再打开。
1.5、print()函数详解 ()中单双引号都可以 print()函数输出字符串'单引号'和"双引号"都可以,必须是英文符号。
Hello Word!
Hello Word!
分隔符seq=’’ 结束符end=’’ print()可以打印变量;
打印分隔符用sep='',位置在()中所有变量后,默认或者不写就是空格,所有字符之间都会用该分隔符。
打印结束符用end='',位置在()中所有变量后,默认或者不写就是换行符\n。
m = 'Hello' n = 'Word' print (m,n,sep=',' ,end=' ' )
Hello,Word
转义字符 \n \t print()转义字符,在字符串中使用转义字符来打印一些特殊字符,例如换行符 \n,制表符 \t (通常相当于Tab键)。
Hello
Word
Hello Word
打印列表list和字典dict print()打印列表、字典等数据结构。
list_1 = [1 ,2 ,3 ,4 ,5 ,6 ] dict_1 = {'name' :'wang' ,'age' :24 } print (list_1)print (dict_1)
[1, 2, 3, 4, 5, 6]
{'name': 'wang', 'age': 24}
print()中的.format()方法。在字符串中插入占位符 {},然后使用 .format() 方法将变量的值填充到这些占位符中。
name = "Alice" age = 30 formatted_string = "Name: {}, Age: {}" .format (name, age) print (formatted_string)
Name: Alice, Age: 30
还可以使用索引或关键字参数来指定.format(),哪个值应该填充到哪个占位符。
formatted_string = "Age:{1},Name:{0}" .format (name, age) print (formatted_string)formatted_string = "Name: {name}, Age: {age}" .format (name="Alice" , age=30 ) print (formatted_string)
Age:30,Name:Alice
Name: Alice, Age: 30
f-string直接用{}引入变量名 print()中的f-string方法,是Python 3.6后引入的一种新的字符串格式化方法。
f-string更加简洁和直观,可以直接在字符串中嵌入表达式,在运行时还可以被求值,并将结果插入到字符串中。
name = "Alice" age = 30 formatted_string = f'Name:{name} , Age:{age} ' print (formatted_string)
Name:Alice, Age:30
x = 10 y = 20 formatted_string = f"{x} + {y} = {x + y} " print (formatted_string)
10 + 20 = 30
2、math函数库 Python的math函数库提供了许多用于数学运算的函数。
这些函数涵盖了基本的算术运算、数学常数、三角函数、对数函数、幂函数、取整函数等。
使用math库要先import一下。
以下是一些 math 库中常用的函数和常数
2.1 常数 常数
math.pi: 圆周率 π 的值。
math.e: 自然对数的底数 e 的值。
math.tau: τ 的值,等于 2π。
math.inf: 表示正无穷大。
math.nan: 表示非数字。
2.2 算数运算 算术运算
math.fabs(x): 返回 x 的绝对值。
math.pow(x, y): 返回 x 的 y 次幂。
math.sqrt(x): 返回 x 的平方根。
math.factorial(x): 返回 x 的阶乘。
math.gcd(x, y): 返回 x 和 y 的最大公约数。
2.3 三角函数 三角函数
math.sin(x): 返回 x 的正弦值。
math.cos(x): 返回 x 的余弦值。
math.tan(x): 返回 x 的正切值。
math.asin(x): 返回 x 的反正弦值。
math.acos(x): 返回 x 的反余弦值。
math.atan(x): 返回 x 的反正切值。
2.4 对数函数 对数函数
math.log(a,b): 返回 a 的对数,底数为 b(如果未提供,则默认为 e)。
math.log10(x): 返回 x 的以 10 为底的对数。
math.log2(x): 返回 x 的以 2 为底的对数。
2.0
2.5 取整和舍入 取整和舍入
math.ceil(x): 返回不小于 x 的最小整数。
math.floor(x): 返回不大于 x 的最大整数。
math.trunc(x): 返回 x 的整数部分,去除小数部分。
math.round(x, n): 返回 x 四舍五入到 n 位小数后的值(如果 n 未提供,则四舍五入到整数)。
2.6 其他函数 其他函数
math.isfinite(x): 检查 x 是否既不是无穷大也不是 NaN。
math.isinf(x): 检查 x 是否是正无穷大或负无穷大。
math.isnan(x): 检查 x 是否是 NaN。
math.copysign(x, y): 返回 x 的绝对值,但符号与 y 相同。
3、写注释 3.1 注释的作用 注释可以使得代码清晰或者跳过不想执行的代码。
'\n 三引号是多行注释\n'
3.2 快捷键 在pycharm中,多行注释的快捷键是Ctrl+/ ;
取消注释在此基础上再按一次Ctrl+/ 。
4、数据类型 在Python中,数据类型按照大类分,包括数字类型、序列类型、映射类型、集合类型以及布尔类型等。
1. 数字类型
整型(int):例如,1, 100, -5
浮点型(float):例如,3.14, -0.001
复数型(complex):例如,1+2j, -3.5+4.5j
2. 序列类型
字符串(str):例如,'hello', "world"
列表(list):例如,[1, 2, 3], ['a', 'b', 'c']
元组(tuple):例如,(1, 2, 3), ('a', 'b', 'c')
范围对象(range):例如,range(5), range(1, 10, 2)
3. 映射类型
字典(dict):例如,{'name': 'Alice', 'age': 25}, {1: 'one', 2: 'two'}
4. 集合类型
集合(set):例如,{1, 2, 3}, {'a', 'b', 'c'}
不可变集合(frozenset):例如,frozenset([1, 2, 3])
5. 布尔类型
布尔值(bool):例如,True, False
6. 二进制类型
字节(bytes):例如,b'hello', bytes([72, 101, 108, 108, 111])
字节数组(bytearray):例如,bytearray(b'hello')
内存视图(memoryview):例如,memoryview(b'hello')
7. None类型
None:表示空值或“无”值。
8. 其他类型
类型对象(type):例如,int, str, list
函数类型:例如,通过def定义的函数。
模块类型:例如,导入的模块。
类类型:例如,通过class定义的类。
生成器(generator):通过生成器函数(使用yield关键字的函数)创建的迭代器。
上下文管理器(context manager):用于with语句的对象,支持资源的自动管理。
4.1 数字类型 4.1.1 整形 Python的整型是动态类型,它们的大小不固定,可以根据需要动态增长。
因此,Python整型可以表示和计算的数字范围,理论上依赖于计算机本身的内存大小。
这一点和C、JAVA等语言不同,它们的整型通常是静态的,具有固定的大小和范围。
由于python的整型是动态的,因此也不存在溢出问题。
在Python中,整型的表示方法有多种,主要包括十进制、二进制、八进制和十六进制。
十进制:
十进制是整型默认的表示方法,如123、-456。
二进制:
二进制以0b或0B开头,后面跟随0和1组成的数字序列,
如0b1010表示二进制的1010,转换为十进制为10。
八进制:
八进制以0o开头,后面跟随0到7之间的数字序列,
如0o123表示八进制的123,转换为十进制为83。
十六进制:
十六进制以0x或0X开头,后面跟随0到9以及a到f(或A到F)之间的字符序列,
其中a到f(或A到F)分别表示10到15。
如0x1A3表示十六进制的1A3,转换为十进制为419。
在处理二进制数据时,使用二进制更加直观;
在处理文件权限等八进制数据时,使用八进制;
在处理颜色值等十六进制数据时,使用十六进制。
4.1.2 浮点型 在Python中,浮点型数字可以通过直接书写小数形式(如3.14)或科学记数法形式(如1.23e4表示12300)。
浮点型数字在计算机内部通常以科学记数法的形式存储,即m × 2^e的形式,
其中m是尾数(一个介于1和2之间的浮点数,有时也包括0和2),e是指数(一个整数)。
这种表示方法的好处是可以在有限的空间表示非常大的数字,并保持一定的精度。
浮点型和整型的互换 将整型转为浮点型,使用内置的float()函数。
在我们看起来是只出现了一位小数,实际上是元素的数据类型发生了变化。
a = 5 b = float (a) print (f"b = {b} " )print (f"a的类型是:{type (a)} " )print (f"b的类型是:{type (b)} " )
b = 5.0
a的类型是:<class 'int'>
b的类型是:<class 'float'>
将浮点型转为整型,使用内置的int()函数或round()函数。
int()会截断浮点型,只保留整数部分;
round()可以四舍五入。
a = 3.66 b = int (a) c = round (a) print (f"a = {a} " )print (f"b = {b} " )print (f"c = {c} " )
a = 3.66
b = 3
c = 4
浮点型保留小数位数 使用round()函数,保留小数位数的同时,进行了四舍五入。
a = 3.6666666 b = round (a, 2 ) print (b)
3.67
使用%操作符,保留小数位数的同时,进行了四舍五入。
a = 3.6666666 b = "%.2f" % a print (b)
3.67
使用f-string。
a = 3.6666666 b = f"{a:.2 f} " print (b)
3.67
截断到小数点后而不四舍五入
a = 3.14159 b = int (a * 100 ) / 100 print (b)
3.14
4.2、序列类型 4.2.1、字符串 字符串(String)是由零个或多个字符组成的序列,用于表示文本。
字符串是不可变的,字符串一旦被创建,其内容就不能被更改。
当“修改”字符串时,Python实际上是在内存中创建了一个新的字符串对象,
该对象是修改后的内容,而原始的字符串则保持不变。
字符串的创建 单引号:'Hello, World!',
双引号:"Hello, World!",
三引号(单引号或双引号均可):用于创建多行字符串。
print ('Hello, World!' )print ("Hello, World!" )print ('''Hello World''' )
Hello, World!
Hello, World!
Hello
World
字符串的索引和切片 索引:字符串中的每个字符都有一个位置索引,类似下标。
从0开始,可以通过索引访问字符串中的特定字符。
s = "Hello" print (s[0 ])print (s[4 ])
H
o
切片:通过切片可以获取字符串的任意子串。
切片操作使用冒号分隔开始和结束的索引(下标),甚至可以自定义步长。
s = "Hello, World!" print (s[0 :5 ])print (s[:5 ]) print (s[7 :]) print (s[::2 ])
Hello
Hello
World!
Hlo ol!
字符串格式化 百分号(%)格式化:
使用%符号作为占位符,并在其后指定一个格式说明符(s表示字符串,d表示整数)。
name = "Alice" age = 30 formatted_string = "Name: %s, Age: %d" % (name, age) print (formatted_string)
Name: Alice, Age: 30
str.format()方法:
使用花括号{}作为占位符,可以通过位置或关键字参数来传递值。
name = "Bob" age = 25 formatted_string = "Name: {}, Age: {}" .format (name, age) formatted_string_kw = "Name: {NAME}, Age: {AGE}" .format (NAME=name, AGE=age) print (formatted_string)print (formatted_string_kw)
Name: Bob, Age: 25
Name: Bob, Age: 25
字符串的比较 按照字符串中字符的Unicode码逐一进行比较。
一般大写<小写,不区分大小写的化要加上.lower()或者.upper()方法。
a = "apple" b = "banana" c = "Apple" print (a < b) print (a < c) print (a == "apple" ) print (a.lower() == c.lower())
True
False
True
True
字符串的迭代 在Python中,字符串是一种可迭代的数据类型。
可以遍历字符串中的每个字符,并逐一处理它们。
my_string = "hello" for char in my_string: print (char)
h
e
l
l
o
字符串的方法和属性 len(s):返回字符串的长度。
s.upper():将字符串转换为大写。
s.lower():将字符串转换为小写。
s.strip():去除字符串两端的空白字符(或其他指定字符)。
s.split():根据指定的分隔符将字符串分割成列表。
s.join():将可迭代对象中的元素以字符串为分隔符连接成一个新的字符串。
s.find():在字符串中查找子字符串的起始索引,如果找不到则返回-1。
s.replace():将字符串中的旧子字符串替换为新子字符串。
s.startswith():检查字符串是否以指定的前缀开始。
s.endswith():检查字符串是否以指定的后缀结束。
s = "Hello, world!" print (len (s))
13
s = " Hello, world! " print (s.strip()) s = "xxxHello, world!xxx" print (s.strip('x' ))
Hello, world!
Hello, world!
s = "Hello, world, this is a test" print (s.split()) print (s.split(', ' ))print (s.split(', ' , 1 ))
['Hello,', 'world,', 'this', 'is', 'a', 'test']
['Hello', 'world', 'this is a test']
['Hello', 'world, this is a test']
words = ['Hello' , 'world' , 'this' , 'is' , 'a' , 'test' ] print (' ' .join(words))
Hello world this is a test
s = "Hello, world!" print (s.find('world' ))print (s.find('Python' ))
7
-1
s = "Hello, world! Hello, Python!" print (s.replace('Hello' , 'Hi' ))print (s.replace('Hello' , 'Hi' , 1 ))
Hi, world! Hi, Python!
Hi, world! Hello, Python!
s = "Hello, world!" print (s.startswith('Hello' )) print (s.startswith('world' )) print (s.endswith('Hello' )) print (s.endswith('world!' ))
True
False
False
True
4.2.2、列表 Python中列表用于存储一系列的项目或元素。
这些元素可以是不同类型的数据,比如数字、字符串、甚至是其他列表(即嵌套列表)。
创建列表 numbers = [1 , 2 , 3 , 4 , 5 ] print (numbers)fruits = ["apple" , "banana" , "cherry" ] print (fruits)mixed = [1 , "two" , 3.0 , True ] print (mixed)empty_list = []
[1, 2, 3, 4, 5]
['apple', 'banana', 'cherry']
[1, 'two', 3.0, True]
访问元素 访问元素
列表中的元素可以通过索引(下标)来访问,索引从0开始。
正数表示正着第几个,负数表示倒着第几个。
print (fruits[0 ])print (fruits[-1 ])
apple
cherry
修改元素 修改元素
通过索引可以直接修改列表中的元素。
fruits[1 ] = "blueberry" print (fruits)
['apple', 'blueberry', 'cherry']
添加元素 添加元素
可以用append()在列尾添加元素,
也可以用insert()在指定位置插入元素,剩下的往后顺推。
fruits.append("date" ) print (fruits) fruits.insert(1 , "elderberry" ) print (fruits)
['apple', 'blueberry', 'cherry', 'date']
['apple', 'elderberry', 'blueberry', 'cherry', 'date']
删除元素 删除元素
可以使用remove()方法根据值删除元素;
或使用pop()方法根据索引弹出第几位元素,列表此时只有剩下的元素;
还可以使用del语句按照索引直接删除。
fruits.remove("blueberry" ) print (fruits)removed_fruit = fruits.pop(2 ) print (fruits)print (removed_fruit)del fruits[1 ]print (fruits)
['apple', 'elderberry', 'cherry', 'date']
['apple', 'elderberry', 'date']
cherry
['apple', 'date']
列表遍历 列表遍历
使用for循环遍历列表中的元素。
for fruit in fruits: print (fruit)
apple
date
列表推导式 列表推导式
根据某个数学公式来创建并填充列表。
squares = [x**2 for x in range (10 )] print (squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
列表嵌套 列表嵌套
列表可以包含其他列表,形成多维数组或矩阵。
matrix = [ [1 , 2 ], [3 , 4 ] ] print (matrix)
[[1, 2], [3, 4]]
列表切片 列表切片
切片操作返回的是一个新的列表,原始列表不会被修改。
list[a,b,n]返回第[a,b)位置的元素,步长为n,间隔为n-1。
numbers = [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] print (numbers[0 :5 :])print (numbers[::2 ])print (numbers[::-1 ])print (numbers[::-2 ])
[0, 1, 2, 3, 4]
[0, 2, 4, 6, 8]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[9, 7, 5, 3, 1]
列表的排序和反转 列表的排序和反转
sort() 方法:对列表进行原地排序,不返回新的列表。
sorted() 函数:返回一个新的排序后的列表,不修改原列表。
reverse() 方法:对列表进行原地反转,不返回新的列表。
numbers = [5 , 2 , 9 , 1 , 5 , 6 ] numbers.sort() print (numbers)numbers = [5 , 2 , 9 , 1 , 5 , 6 ] sorted_numbers = sorted (numbers) print (sorted_numbers) print (numbers) numbers = [1 , 2 , 3 , 4 , 5 ] numbers.reverse() print (numbers)
[1, 2, 5, 5, 6, 9]
[1, 2, 5, 5, 6, 9]
[5, 2, 9, 1, 5, 6]
[5, 4, 3, 2, 1]
列表的合并和拆分 列表的合并和拆分
使用 + 运算符:将两个或多个列表合并成一个新的列表。
使用 * 运算符:重复列表元素以创建新列表。
list1 = [1 , 2 , 3 ] list2 = [4 , 5 , 6 ] merged_list = list1 + list2 print (merged_list) repeated_list = list1 * 3 print (repeated_list)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
返回某值出现的次数 返回列表中指定值出现的次数
list.count(value)返回列表中指定值出现的次数。
my_list = [1 , 2 , 3 , 2 , 4 , 2 , 5 ] count_of_2 = my_list.count(2 ) print (count_of_2)
3
返回某值第一次出现的索引 返回列表中指定值第一次出现的索引
list.index(value)返回列表中指定值第一次出现的索引(下标)。
my_list = [1 , 2 , 3 , 4 , 5 ] first_index_of_3 = my_list.index(3 ) print (first_index_of_3)
2
4.2.3、元组 元组和列表类似,主要区别是元组不可变,一旦创建,元组内容就不被改变。
所以元组的操作和列表类似,
一般元组被用来作为字典的键。
创建元组 元组用()来表示,虽然方便了,但是在创建单个元组的时候容易和变量赋值混淆。
my_tuple = (1 , 2 , 3 , 4 ) single_element_tuple = (5 ,) print (single_element_tuple)not_a_tuple = (6 ) print (not_a_tuple)
(5,)
6
元组的操作 元组的操作包括切片、访问、计数、索引、拼接、重复等,和列表基本一样。
注意:元组不能修改某项。
注意:拼接和重复后的元组实际上是形成了一个新的元组。
不可变性带来的好处 由于元组是不可变的,它们在某些情况下比列表更安全、更高效。
例如,作为字典的键或集合的元素时,不可变性保证了数据的一致性和哈希值的稳定性。
注意:
如果元组中的元素是可变的(如列表),那么这些元素的内容可以改变,
但元组本身的结构(即元素的顺序和类型)仍不可变。
mutable_tuple = ([1 , 2 ], [3 , 4 ]) mutable_tuple[0 ].append(5 ) print (mutable_tuple)
([1, 2, 5], [3, 4])
4.2.4 范围对象 在Python中,范围对象通过内置的range()函数生成。
它表示一个不可变的整数序列,通常用于for循环中生成一系列数字。
范围对象最大的好处就是高效,它们不会存储所有数字,而是根据需要生成它们。
创建范围对象 r = range (5 ) print (list (r))r = range (1 , 10 , 2 ) print (list (r))
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]
在for循环中使用范围对象 这是range()最常用的地方。
注意:
一般step都是正数;如果step为负数,则序列是递减的。
当step为负数时,start应该大于stop,否则循环将为空。
for i in range (10 ): print (i)
0
1
2
3
4
5
6
7
8
9
for i in range (0 ,10 ,2 ): print (i)
0
2
4
6
8
4.3、映射类型 4.3.1、字典 字典顾名思义,用于存储键值对(key-value),主要用来检索。
核心是一个键对应一个值。
字典是无序的,它不记录元素插入的顺序。
字典通过键(key)来访问值(value),这使得数据查找和修改操作非常快速。
字典的创建 字典通过花括号 {} 创建,键和值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。
my_dict = {'name' : 'ZhangSan' , 'age' : 25 , 'city' : 'BeiJing' } print (my_dict)
{'name': 'ZhangSan', 'age': 25, 'city': 'BeiJing'}
也可以通过 dict() 函数创建空字典,然后添加键值对。
my_dict['name' ] = 'LiSi' my_dict['age' ] = 26 print (my_dict)
{'name': 'LiSi', 'age': 26, 'city': 'BeiJing'}
访问字典元素 访问字典元素
使用键来访问字典中的值。
LiSi
如果尝试访问不存在的键,会引发 KeyError。
为了避免这种错误,可以使用字典的 get() 方法,
my_dict.get('键值','要返回的默认值')
指定一个默认值,如果键不存在则返回这个默认值。
print (my_dict.get('IP' ,'Nothing Find.' ))
Nothing Find.
添加、删除字典元素 如果键不存在于字典中,直接赋值即可添加新的键值对。
使用 del 语句或 pop() 方法删除字典中的键值对。
my_dict['email' ] = 'LiSi@example.com' print (my_dict)
{'name': 'LiSi', 'age': 26, 'city': 'BeiJing', 'email': 'LiSi@example.com'}
del my_dict['city' ]print (my_dict)
{'name': 'LiSi', 'age': 26, 'email': 'LiSi@example.com'}
remove = my_dict.pop('age' ) print (remove)print (my_dict)
25
{'name': 'ZhangSan', 'city': 'BeiJing'}
字典的遍历 可以使用 for 循环遍历字典的键、值或键值对
如果my_dict不加任何方法,是遍历键;
加上my_dict.values()是遍历值;
加上my_dict.items()是遍历键值对,但是注意要有两个变量来接收。
for key in my_dict: print (key)
name
age
city
for value in my_dict.values(): print (value)
ZhangSan
25
BeiJing
for item in my_dict.items(): print (item)
('name', 'ZhangSan')
('age', 25)
('city', 'BeiJing')
字典的性质 字典的特性
唯一性:键必须唯一,但值可以重复。
无序性:字典在Python 3.7及更高版本中保持插入的顺序,但不应依赖此行为作为字典的普遍特性,因为字典本质上仍然是无序的。
可变性:字典是可变的,可以添加、修改或删除键值对。
特备注意!!!
键的类型:字典的键是不可变的类型,可以是字符串、数字或元组,不能是列表或字典等可变类型。
字典的值可以是可变的数据类型。
4.4、集合类型 4.4.1 集合 Python中集合是一个无序的、不包含重复元素的集合类型。
集合中的元素是唯一的,集合中不会出现两个相同的元素。
集合和字典的形式有相似之处,都是用{}引起来;
字典中是键值对,集合中是不重复的元素。
集合的创建 使用大括号 {} 包裹元素列表,元素之间用逗号分隔。
注意:此法不能创建空集合,因为那样创建出来的是空字典。
my_set = {1 , 2 , 3 , 4 } print (my_set)my_set_0 = {}
{1, 2, 3, 4}
使用 set() 函数,可把任何可迭代的对象(如列表、元组等)作为参数转换为一个集合。
my_set_list = set ([1 ,2 ,3 ,4 ]) print (my_set_list)my_srt_dict = set ({'name' : 'ZhangSan' , 'age' : '20' }) print (my_srt_dict)
{1, 2, 3, 4}
{'age', 'name'}
集合添加元素 用set.add()方法添加元素,如果元素已经存在则不会添加。
my_set.add(5 ) print (my_set)
{1, 2, 3, 4, 5}
集合移除元素 有三种方法可以移除元素,分别是会报错、不会报错和随机弹出。
remove()方法删除集合中的指定元素;若该元素不存在,会引发 KeyError。
discard()方法也可以删除指定元素,若元素不存在,不会引发错误。
pop()方法可以随机删除并返回。
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_11720\1418257225.py in <module>
----> 1 my_set.remove(6)
KeyError: 6
1
判断元素是否存在 用in 可以判断元素是否存在在集合内。
if 1 in my_set: print ("1存在!" ) else : print ("1不存在!" )
1不存在!
集合运算 和数学上的集合类似,集合支持交、并、差的操作。
集合运算才是集合最常用的操作。
并集(| 或 union())
交集(& 或 intersection())
差集(- 或 difference())
对称差集(^ 或 symmetric_difference())等。
my_set_12345 = {1 ,2 ,3 ,4 ,5 } my_set_34567 = {3 ,4 ,5 ,6 ,7 } set_union = my_set_12345 | my_set_34567 print (set_union)set_inter = my_set_12345 & my_set_34567 print (set_inter)set_diff = my_set_12345 - my_set_34567 print (set_diff)
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
用集合来去重 集合常用来去除列表中的重复元素。
old_list = [1 , 2 , 3 , 4 , 4 , 5 , 5 , 6 ] _set = set (old_list) _list = list (_set ) print ("原始列表:" , old_list)print ("去重后的集合:" , _set )print ("去重后的列表:" , _list )
原始列表: [1, 2, 3, 4, 4, 5, 5, 6]
去重后的集合: {1, 2, 3, 4, 5, 6}
去重后的列表: [1, 2, 3, 4, 5, 6]
old_list = [1 ,1 ,2 ,2 ,3 ,3 ,4 ,4 ,5 ,5 ,6 ,6 ] _set = set () unique_ordered_list = [] for i in old_list: if i not in _set : unique_ordered_list.append(i) _set .add(i) print ("原始列表:" , old_list)print ("去重且保留顺序的列表:" , unique_ordered_list)
原始列表: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]
去重且保留顺序的列表: [1, 2, 3, 4, 5, 6]
4.5、集合、字典、元组、列表的比较 列表list[]是最基本的数据结构;
元组tuple()和列表类似,只不过元组不可变;
字典dict{}是存键值对,主要用来索引;
集合set{}和字典都用{},集合中是不重复的元素。
4.6 布尔类型 Python中布尔类型有两个,True和False,即真或假,表示逻辑上的真或假。
布尔类型广泛应用于条件判断、循环控制和逻辑运算。
4.6.1、布尔值的产生 直接通过Ture和False来创建
通过条件判断来产生
False
布尔值与整型的转换 布尔类型可以隐式地转换为整型。
print (int (True ))print (int (False ))
1
0
整型也可以转化为布尔型。
print (bool (1 ))print (bool (0 ))print (bool (-1 ))
True
False
True
非零的数值、非空的字符串、非空的列表等都被视为真(True);
零、空字符串、空列表等则被视为假(False)。
4.6.2、布尔值与逻辑运算 Python中逻辑运算是对布尔值进行操作的运算,其结果也是布尔值。
与运算 and && print (True and True )print (True and False )
True
False
或运算 or || print (True or False )print (False or False )
True
False
非运算 not !
False
模拟异或 Python中没有异或,可以通过与或非来模拟异或。
当两个相同的时候为真假,不同时为真。
def Xor (a,b ): a = bool (a) b = bool (b) return (a and not b) or (not a and b)