武昌网站建设价格多少,网站开发与维护能做什么职业,品牌建设标题,高端企业网站开发文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用 5.3 布尔类型5.4 字符串5.3.1 字符串的基本操作5.3.2 字符串函… 文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用 5.3 布尔类型5.4 字符串5.3.1 字符串的基本操作5.3.2 字符串函数5.3.3 strip、split和 join 函数详解5.3.4 字符串的比较 5.5 格式化字符串5.5.1 使用%进行格式化5.5.2 使用format进行格式化5.5.3 f-string 格式化Python 3.6 六、组合数据类型6.1 集合6.2 序列6.2.1 元组6.2.2 列表6.2.2.1 列表常用函数6.2.2.2 列表推导式 6.3 字典6.3.1 字典基本操作6.3.2 字典推导式6.3.3 统计三国出场人物生成词云 Python官网、Python 3.11.5 中文文档、慕课Python语言程序设计 五、基本数据类型 在 Python 中数据类型用于表示不同类型的数据例如整数、浮点数、字符串等Python 支持多种内置数据类型包括但不限于
整数int表示整数值例如10, -5, 1000。浮点数float表示带有小数部分的数值例如3.14, 0.5, -2.0。字符串str表示文本数据用单引号或双引号括起例如Hello, Python。布尔值bool表示真True或假False的逻辑值。列表list表示有序的数据集合可以包含不同类型的元素。元组tuple类似于列表但是不可变元素用小括号括起。字典dict表示键-值对的集合用花括号括起。集合set表示无序且不重复的元素集合。
5.1 整数和浮点数
5.1.1 整数和浮点数的类型
整数int和浮点数float 是python中的基础数据类型其中整数存储格式和范围为
格式字节数最小值最大值int81-128127int162-32,76832,767int324-2,147,483,6482,147,483,647int648-9,223,372,036,854,775,8089,223,372,036,854,775,807
浮点数存储格式和范围为
格式字节数非负最小值非负最大值小数位数float16半精度2 5.96 × 1 0 − 8 5.96 \times 10^{-8} 5.96×10−8 6.55 × 1 0 4 6.55 \times 10^{4} 6.55×1043-4float32单精度4 1.40 × 1 0 − 45 1.40 \times 10^{-45} 1.40×10−45 3.40 × 1 0 38 3.40 \times 10^{38} 3.40×10387-8float64 双精度8 5.00 × 1 0 − 324 5.00 \times 10^{-324} 5.00×10−324 1.80 × 1 0 308 1.80 \times 10^{308} 1.80×1030815-17 在 Python 2 中存在两种整数类型int 和 long。然而在 Python 3 中这两种类型已经合并为统一的整数类型 int因此不存在 long 类型。 在Python中通常情况下你不需要显式指定整数或浮点数的类型因为Python解释器会自动根据数值的大小和值来确定数据类型。这种动态类型的特性使得Python非常灵活适用于各种编程任务。 如果你想查看一个数字的具体类型可以使用内置函数 type() 来检查。如果想了解整数或浮点数的位数可以使用NumPy中的dtype属性来获取。
import numpy as np
a,b 42,3.14# 获取整数和浮点数的数据类型
int_type,float_type type(a) , type(b)
int_dtype,float_dtype np.array(a).dtype , np.array(b).dtype# 打印数据类型和位数
print(f整数 a 的数据类型是 {int_type}位数是 {int_dtype} )
print(f浮点数 b 的数据类型是 {float_type}位数是 {float_dtype} 位)整数 a 的数据类型是 class int位数是 int32
浮点数 b 的数据类型是 class float位数是 float64 位如果你希望显式指定整数或浮点数的类型可以使用以下方法
使用numpy.intXX或numpy.floatXX构造指定类型的数字
x np.int16(42) # 创建一个16位整数
y np.float32(3.14) # 创建一个32位浮点数使用dtype属性来指定
x np.array([1, 2, 3], dtypenp.int16)
y np.array([1.0, 2.0, 3.0], dtypenp.float32)5.1.2 进制和进制转换
进制描述示例二进制Binary由0和1组成以0b或0B开头。0b1010八进制Octal由0到7组成以0o或0O开头。0o17十六进制Hexadecimal由0到9和A到F大小写均可组成以0x或0X开头。0x1A
进制转换描述示例转换为二进制使用 bin() 函数。bin(10) 返回 0b1010转换为八进制使用 oct() 函数。oct(17) 返回 0o21转换为十六进制使用 hex() 函数。hex(26) 返回 0x1a
5.1.3 round函数
round() 是Python内置的一个函数用于将浮点数四舍五入到指定的小数位数语法如下
round(number, ndigits)number 是要四舍五入的浮点数。ndigits 是要保留的小数位数可选参数。如果不提供 ndigits则默认为0表示将浮点数四舍五入到最接近的整数。
round(3.14) # 返回 3
round(3.65) # 返回 4
round(3.14159265, 2) # 返回 3.14
round(3.14159265, 4) # 返回 3.1416ndigits 参数也可以是负数此时round() 会将浮点数的小数点左边的指定位数变为零然后再四舍五入。这种功能在处理大数时很有用。例如芬兰的面积为 338,424 平方公里格陵兰岛的面积为 2,166,086 平方公里。我们在介绍时不需要这么精确就可以使用round函数
finland_area 338424 # 芬兰的面积
greenland_area 2166086 # 格陵兰岛的面积
print(f芬兰的面积为{round(finland_area, -3)}平方公里格陵兰岛的面积为{round(greenland_area, -3)}平方公里)芬兰的面积为338000平方公里格陵兰岛的面积为2166000平方公里如果要进行更精确的四舍五入或舍弃请使用 decimal 模块中的 Decimal 类。 在某些情况下由于浮点数的表示方式round() 可能不会像你期望的那样工作。因此在涉及精确计算的应用程序中请小心处理浮点数。 5.2 运算符
5.2.1 常用运算符、运算符函数和逻辑运算符
以下是 Python 中常用的运算符以 Markdown 表格形式表示
运算符描述示例加法x y-减法x - y*乘法x * y/除法x / y%取模取余数x % y//取整除x // y**幂运算x ** y等于x y!不等于x ! y小于x y大于x y小于等于x y大于等于x y装饰器decorator
快捷运算符说明加法赋值运算符等同于 x x y-减法赋值运算符等同于 x x - y*乘法赋值运算符等同于 x x * y/除法赋值运算符等同于 x x / y//取整除赋值运算符等同于 x x // y%取模赋值运算符等同于 x x % yat 赋值运算符等同于 x x y位与赋值运算符等同于 x x y|位或赋值运算符等同于 x x^位异或赋值运算符等同于 x x ^ y右移赋值运算符等同于 x x y左移赋值运算符等同于 x x y**幂赋值运算符等同于 x x ** y
运算符函数描述abs(x)返回 x 的绝对值pow(x, y)返回 x 的 y 次幂sqrt(x)返回 x 的平方根round(x, n)返回 x 的四舍五入值可指定小数位数 nmax(iterable)返回可迭代对象中的最大值min(iterable)返回可迭代对象中的最小值sum(iterable)返回可迭代对象中所有元素的和divmod(x, y)返回 (x // y, x % y) 的元组int(x)将 x 转换为整数float(x)将 x 转换为浮点数complex(real, imag)创建一个复数
逻辑运算符描述示例not逻辑非取反not xand逻辑与与x and yor逻辑或或x or yis、is not判断是否为同一对象即检查它们是否指向内存中的相同对象x is yin、not in判断一个元素是否存在于一个容器如列表、元组、字符串、集合等中x in y 注意在使用 is 和 is not 运算符时要谨慎因为它们检查对象的身份而不是值有时可能会导致意外的结果。通常情况下我们更倾向于使用 和 ! 运算符来比较对象的值是否相等。 5.2.2 位运算符 位运算是计算机中对二进制位进行操作的一种运算方式。它们用于直接操作二进制表示的数据通常用于底层编程、位级操作和优化算法中。位运算包括以下常见的操作
位运算符描述示例按位与运算符对每个位进行与运算相同位均为 1 时结果位为 1否则为 0。x y|按位或运算符对每个位进行或运算至少一个位为 1 时结果位为 1。x | y^按位异或运算符对每个位进行异或运算相同位为 0不同位为 1。x ^ y~按位取反运算符对每个位进行取反运算0 变 11 变 0。~x左移运算符将二进制数左移指定位数。x y右移运算符将二进制数右移指定位数。x y
下面举一个例子来更详细的说明位运算
# 函数示例演示位运算符的用法
def bitwise_operators_example(a, b):# 1. 按位与对应位都为1时结果为1否则为0result_and a b# 2. 按位或|对应位有一个为1时结果为1否则为0result_or a | b# 3. 按位异或^对应位不相同为1相同为0result_xor a ^ b# 4. 按位取反~每个位上的0变成11变成0result_not_a ~aresult_not_b ~b# 5. 左移位将二进制数左移指定位数低位用0填充result_left_shift a 2# 6. 右移位将二进制数右移指定位数高位用0填充对于正数或用1填充对于负数result_right_shift a 2# 输出结果print(fa b: {result_and})print(fa | b: {result_or})print(fa ^ b: {result_xor})print(f~a: {result_not_a})print(f~b: {result_not_b})print(fa 2: {result_left_shift})print(fa 2: {result_right_shift})# 示例使用
bitwise_operators_example(5, 3)a b: 1
a | b: 7
a ^ b: 6
~a: -6
~b: -4
a 2: 20
a 2: 1让我们逐个解释这些结果以更好地理解为什么会得到这些值。 a 的二进制表示是 101 b 的二进制表示是 011。
a b: 1按位与 对应位都为1的情况下结果为1所以 101 011 的结果是 001即十进制的1。a | b: 7按位或对应位只要有一个为1结果就为1所以 101 | 011 的结果是 111即十进制的7。a ^ b: 6按位异或 对应位不同为1相同为0所以 101 ^ 011 的结果是 110即十进制的6。~a: -6按位取反注意负数表示 ~a 对 a 的每个位取反得到 010。 由于二进制的最高位是1表示负数所以 010 在补码表示中表示的是 -6。~b: -4按位取反注意负数表示 ~b 对 b 的每个位取反得到 100。 由于二进制的最高位是1表示负数所以 100 在补码表示中表示的是 -4。a 2: 20左移位 左移2位相当于将二进制数向左移动2位并在低位补充0所以 101 2 的结果是 10100即十进制的20。a 2: 1右移位 右移2位相当于将二进制数向右移动2位所以 101 2 的结果是 1即十进制的1。 位运算的补码是一种用于表示负整数的二进制数表示方法它在计算机中广泛使用。补码的定义和用法如下 原码原码表示法是最简单的二进制表示法。对于正整数它的原码和二进制表示一样。例如十进制的5表示成原码是 00000101。反码反码表示法是在原码的基础上对负整数的符号位最高位取反。对于正整数它的反码和原码一样。例如十进制的5的反码也是 00000101。补码补码表示法是在反码的基础上将所有位取反后加1。对于正整数它的补码和原码一样。例如十进制的5的补码也是 00000101。 但是补码的真正优势在于表示负整数。例如要表示十进制的-5首先找到5的补码 00000101然后将所有位取反得到 11111010最后加1得到 -5 的补码。这意味着在计算机中加法和减法可以使用相同的硬件逻辑来执行因为减法可以转换为加法。 5.2.3 运算符的优先级及其进阶使用 在Python中运算符具有不同的优先级这决定了它们在表达式中的计算顺序。如果表达式中包含多个运算符Python会按照一定的规则确定它们的计算顺序。以下是一些常见运算符的优先级按照从高到低的顺序
幂运算符**正号和负号 和 -一元运算符算术运算符*乘法、/除法、//整除、%取余数加法和减法运算符 和 -二元运算符位左移和位右移运算符 和 位与运算符位异或运算符^位或运算符|比较运算符、、、、、!逻辑非运算符not逻辑与运算符and逻辑或运算符or 如果需要改变运算顺序可以使用小括号 () 来明确指定表达式的计算顺序。括号中的表达式会首先被计算。下面是一些进阶知识 比较操作支持链式操作可以在一条表达式中进行多次比较并且这些比较操作会按照从左到右的顺序依次执行。例如a b c 将首先比较 a 是否小于 b然后再检查 b 是否等于 c。这个表达式会返回布尔值 True 或 False表示整个比较表达式的结果。 a 3
b 4
c 4
result a b c # 结果为 True因为 a 小于等于 b且 b 等于 cand 、 or和not组合操作可以使用 and 和 or 运算符来组合多个比较操作或布尔表达式并根据其真假情况得到最终的布尔结果。最后可以用not 运算符来取反。因此A and not B or C 等价于 (A and (not B)) or C。 布尔运算符是短路运算符这意味着在进行布尔运算时Python会从左到右逐个检查操作数并且一旦确定整个表达式的结果就会停止继续检查这可以提高性能并防止不必要的计算。 a True
b False
c True
result a and b and c # 结果为 False因为一旦发现 b 为假就停止继续检查 c5.3 布尔类型 Python中的布尔类型非常简单它只有两个值True和False分别表示1和0可以直接参与计算。这两个值也通常用于表示逻辑真和逻辑假。布尔类型通常与条件语句一起使用广泛用于控制循环、判断条件、过滤数据等等。
True False # 结果为1Python还提供了一些用于处理布尔类型的内置函数如 bool() 函数用于将其他数据类型转换为布尔类型any() 和 all() 用于对迭代对象中的布尔值进行判断。
# bool() 函数
x bool(5) # True
y bool(0) # False# any() 和 all() 函数
numbers [True, False, True]
any_true any(numbers) # True至少有一个True
all_true all(numbers) # False不是所有的都是True在Python中布尔类型 False 只是布尔对象的一种而其他对象也可以在适当的情况下被视为 False。Python中定义了一个规则根据这些规则以下对象被视为 False
布尔值False 是显而易见的它是布尔值的字面值。数字一些数字也被视为 False。这包括整数0、浮点数0.0以及其他数值类型中的零值。空序列和集合空的序列如空列表 []、空元组 ()、空字符串 和空集合如空集合 set()也被视为 False。空格符被视作True特殊对象 NoneNone 表示空值也被视为 False。自定义类的实例如果自定义的类中定义了 __bool__() 或 __len__() 方法并且这些方法返回 False 或者0那么该类的实例也被视为 False。
你可以使用以下方式测试一个对象是否为 False
value 0if not value:print(value 是 False 或者空)
else:print(value 是 True 或者非空)5.4 字符串 在Python中字符串是一种用来存储文本数据的数据类型你可以使用单引号 、双引号 或三重引号 或 来创建字符串。
single_quoted 这是一个单引号字符串
double_quoted 这是一个双引号字符串
triple_quoted 这是一个
多行字符串5.3.1 字符串的基本操作 拼接和复制 你可以使用 运算符将两个字符串连接起来使用 * 运算符将一个字符串复制多次 合并 相邻的两个或多个 字符串 引号标注的字符会自动合并拼接分隔开的长字符串时这个功能特别实用。这项功能只能用于两个字面值不能用于变量或表达式。合并多个变量或合并变量与字面值要用
Py thon
Pythontext (Put several strings within parentheses to have them joined together.)
textPut several strings within parentheses to have them joined together.prefix Py
prefix thonPython索引字符串中的字符可以通过索引来访问索引从0开始负索引表示从末尾开始计数 切片 你可以使用切片来获取字符串的一部分。 如果省略起始索引将从字符串的开头开始切片。省略结束索引将切片到字符串的末尾你可以使用步长来指定切片的间隔。使用str[::-1]可以反转字符串
text Hello, World!
substring text[7:] # 获取从索引7到11的子字符串值为 World
substring text[0::2] # 从第一个字符开始每隔2个取一个值为Hlo ol!
修改字符串Python 字符串不能修改为字符串中某个索引位置直接赋值会报错。
word Python
word[2:] py
Traceback (most recent call last):File stdin, line 1, in module
TypeError: str object does not support item assignment要生成不同的字符串应新建一个字符串
J word[1:]
Jython5.3.2 字符串函数 可参考官方文档《String Methods》 字符串格式函数描述示例结果str.upper()转换为大写hello.upper()HELLOstr.lower()转换为小写HeLLo.lower()hellostr.title()每个单词首字母大写hello world.title()Hello Worldstr.capitalize()只将字符串的首字母大写hello world.capitalize()Hello worldstr.swapcase()将字符串中的大写/小写字母转换为小写/大写字母Hello World.swapcase()hELLO wORLDstr.strip()去除两侧空格或指定字符 hello .strip()hellostr.split(sep)分割字符串apple,banana,orange.split(,)[apple, banana, orange]str.join(iterable)连接可迭代对象元素, .join([apple, banana, orange])apple, banana, orange
字符串查找函数描述示例结果str.replace(old, new)替换子串Hello, world.replace(world, Python)Hello, Pythonstr.find(sub)查找子串第一次出现的索引不存在则返回-1Hello, world.find(world)7str.rfind(sub)查找子串最后一次出现的索引不存在则返回-1Hello, world.find(world)7str.index(sub)查找子串第一次出现的索引不存在报错ValueErrorHello, world.index(world)7str.rindex(sub)查找子串最后一次出现的索引不存在报错ValueErrorHello, world.index(world)7
字符串转换函数描述示例结果str.replace(old, new)替换子串Hello, world.replace(world, Python)Hello, Pythonstr(obj)将对象转换为字符串str(42)42hex(number)将整数转换为十六进制字符串hex(255)0xffchr(i)将 Unicode 整数转换为字符chr(65)Aord(char)返回字符的 Unicode 整数值ord(A)65
字符串统计检查函数描述示例结果len(str)返回字符串长度len(Hello)5str.count(sub)统计子串出现次数Hello, world, world.count(world)2str.startswith(prefix)检查前缀Hello, world.startswith(Hello)Truestr.endswith(suffix)检查后缀Hello, world.endswith(world)Falsestr.isalpha()检查是否只包含字母Hello.isalpha()Truestr.isdigit()检查字符串是否只包含数字字符只包括阿拉伯数字。12345.isdigit()Truestr.isalnum()检查是否只包含字母和数字hello123.isalnum()Truestr.isnumeric()检查字符串是否由数字组成包括罗马数字。3.14.isnumeric()Falsestr.isdecimal()检查字符串是否只包含十进制数字字符。12345.isdecimal()Truestr.isspace()检查字符串是否只包含空白字符空格、制表符、换行符等。 \t\n.isspace()Truestr.isprintable()检查字符串是否只包含可打印字符不包括控制字符。\n.isprintable()Falsestr.isidentifier()检查字符串是否是有效的 Python 标识符。123var.isidentifier()False
5.3.3 strip、split和 join 函数详解
strip() 函数用于去除字符串两侧的指定字符它的语法如下
str.strip([chars])chars可选指定要去除的字符集合默认为去除空白字符如空格、制表符、换行符等。
# 示例 1: 去除空白字符
text Hello, world
result text.strip()
print(result) # 输出Hello, world# 示例 2: 去除指定字符
text **Hello, world**
result text.strip(*)
print(result) # 输出Hello, worldsplit() 函数
split() 函数用于将字符串分割成子串并返回一个包含子串的列表。它的语法如下
str.split([sep[, maxsplit]])sep可选指定分隔符默认为空白字符。maxsplit可选指定最大分割次数如果提供则最多分割 maxsplit 次。
# 示例 1: 使用默认分隔符空白字符
text apple banana orange
result text.split()
print(result) # 输出[apple, banana, orange]# 示例 2: 使用自定义分隔符
text apple,banana,orange
result text.split(,)
print(result) # 输出[apple, banana, orange]# 示例 3: 限制分割次数
text apple,banana,orange,grape
result text.split(,, 2)
print(result) # 输出[apple, banana, orange,grape]join() 函数
join() 函数用于连接字符串列表中的元素并返回一个新的字符串。它的语法如下
str.join(iterable)iterable要连接的可迭代对象通常是一个包含字符串的列表或元组。
# 示例 1: 连接元组中的字符串
fruits (apple, banana, orange)
result and .join(fruits)
print(result) # 输出apple and banana and orange# 示例 2: 连接字符串列表
words [apple, banana, orange]
result ,.join(words) # 结果是apple,banana,orange
result.split(,) # 结果是[apple, banana, orange]5.3.4 字符串的比较
字符串操作符描述示例结果字符串连接Hello WorldHello World*重复字符串Python * 3PythonPythonPython、!相等比较Hello WorldFalse、、 、 字典序比较apple bananaTrue
如果两个字符串的内容完全相同比较符才返回 True否则返回False。字典序比较您可以使用 、、 和 操作符来比较两个字符串的字典序确定它们在字典中的顺序。这些比较基于字符的 Unicode 编码值。自定义比较规则如果需要按照特定规则进行比较可以编写自定义的比较函数并使用 sorted() 函数或自定义排序算法来比较字符串。例如
# 按照字符串长度排序
names [Alice, Bob, Charlie, David]
names.sort(keylen)
print(names) # 输出[Bob, Alice, David, Charlie]# 按照字符串的最后一个字符排序
words [apple, banana, cherry, date]
sorted_words sorted(words, keylambda x: x[-1])
print(sorted_words) # 输出[banana, cherry, apple, date]5.5 格式化字符串 在Python中格式化字符串是一种用来创建可变的、动态的文本输出的方法。格式化字符串允许将变量的值插入到字符串中从而生成带有数据的文本。这使得输出更加有意义、有用并且具有更好的可读性。Python提供了几种方式来格式化字符串下面一一介绍。
5.5.1 使用%进行格式化 通过在字符串中使用百分号%然后在字符串后面跟上格式化元组可以将变量值插入字符串中。变量值可以是单个值也可以是元组或字典包含的多个值。示例
name Alice
age 30
height 5.8formatted_str Name: %s, Age: %d, Height: %.2f % (name, age, height)在这个示例中%s 插入了字符串 name%d 插入了整数 age%.2f 插入了浮点数 height并且使用 % 运算符连接了这些占位符和变量值。下面是字符串格式化占位符的说明
%s用于插入字符串。%d用于插入整数。%f用于插入浮点数。%x用于插入十六进制整数。 % 格式化不支持格式指定符的高级功能如对齐、填充字符等它相对不够灵活。常更推荐使用 f-strings 或 str.format() 方法
5.5.2 使用format进行格式化 有关此部分的详细内容可参考官方文档《格式字符串语法》 Python 3.0以后引入了更现代的字符串格式化方式使用花括号{}来表示要插入的变量并使用format()方法进行格式化。示例
name Bob
age 30
formatted_string My name is {} and I am {} years old..format(name, age)
print(formatted_string)上面代码中花括号 {} 用作占位符表示将在字符串中的这些位置插入变量的值。format() 方法用于将实际的值插入这些占位符的位置。以下是更详细的说明 位置参数 按照format中变量出现的位置将其插入占位符处。 关键字参数 可以在花括号 {} 中使用变量名来指定要插入的变量。例如Hello, {first} and {second}..format(firstname1, secondname2)。 位置参数与关键字参数混用 可以在 .format() 方法中同时使用位置参数和关键字参数。例如Hello, {} and {second}..format(name1, secondname2)。 索引 可以在花括号 {} 中使用索引表示要插入的变量的位置。例如{1} comes before {0}..format(apple, banana)。 格式指定符 可以在花括号 {} 中使用冒号 : 来添加格式指定符控制插入值的格式。例如Value: {:.2f}.format(3.14159) 将保留两位小数。 空花括号 {} 如果要插入的值与花括号 {} 中的索引不一致可以在花括号内部留空。例如Hello, {}!.format(name)。 转义花括号 使用两个花括号 {{}} 来表示字面的花括号。例如The format is {{}}..format()。
有关格式指定符的详细说明如下 整数格式 d整数。x十六进制小写。X十六进制大写。o八进制。例子Integer: {:d}, Hex: {:x}, Octal: {:o}.format(42, 42, 42)。 浮点数格式 f浮点数。.nf浮点数并指定小数位数。例子Value: {:.2f}.format(3.14159)。 **字符串格式:**例如Hello, {}!.format(Alice) 对齐和宽度 左对齐默认。右对齐。^居中对齐。width设置字段宽度。例子{:10}.format(Hello)。 符号和补零 显示正负号。-仅显示负号默认。0用零填充字段宽度。例子{:}.format(42)。 千位分隔符用逗号分隔数字的千位例如例子{:,}.format(1000000)。 指数记法 e和E分别表示小写和大写的科学计数法例如{:.2e}.format(12345.6789)。 百分号: 将浮点数转换为百分比形式例如{:.2%}.format(0.75)。
5.5.3 f-string 格式化Python 3.6 Python 3.6引入了一种更简洁、直观的字符串格式化方式即f-string。使用f-string您可以在字符串中直接插入变量而无需使用.format()。
name Eve
age 22
formatted_string fMy name is {name} and I am {age} years old.
print(formatted_string)f-string还有一些其它的用法
使用表达式您可以在 f-string 中使用表达式这使得在字符串内部进行计算变得更加方便。
num1,num2 10,20
result fThe sum of {num1} and {num2} is {num1 num2}.
print(result)格式指定符f-string 也支持格式指定符来控制插入值的格式并且与format方法中的格式指定符是完全一样的。另外还使用变量名作为格式化指定符它将自动选择适当的格式。
pi 3.14159
formatted_pi fThe value of pi is approximately {pi:.2f}.age 25
formatted_age fI am {age} years old, which is {age:d} in integer format.
print(formatted_pi,formatted_age)调用函数你还可以在 f-string 中调用函数并将结果插入到字符串中。
def double(x):return x * 2num 5
formatted_string fDouble of {num} is {double(num)}.
print(formatted_string)转义花括号同format一样使用两个花括号 {{}} 来插入字面的花括号。
name Bob
formatted_string fHis name is {name}, and he likes {{Python}} programming.
print(formatted_string)六、组合数据类型
6.1 集合
集合是Python中的一种数据结构它类似于列表List但有一些重要的区别
集合中的元素是无序的不重复的即集合中不允许重复的元素集合用花括号 {} 表示或者可以使用 set() 函数来创建。要注意的是创建空集合只能用 set()不能用 {}因为{} 创建的是空字典集合支持集合运算如并集、交集、差集等。与 列表推导式 类似集合也支持推导式
a {x for x in abracadabra if x not in abc}下面是常用的集合操作符和函数
集合操作符说明S T 或S.intersection(T)交返回一个新集合包括同时在集合 S 和 T 中的元素S | T或S.union(T)并返回一个新集合包括在集合S和T中的所有元素S - T或 S.difference(T)差返回一个新集合包括在集合 S 但不在 T 中的元素S ^ T或S.symmetric_difference(T)补返回一个新集合包括集合 S 和 T 中的非相同元素S T 或 S T返回 True/False判断 S 和 T 的子集关系S T 或 S T返回 True/False判断 S 和 T 的包含关系S.issubset(T)判断 S 是否是 T 的子集S.issuperset(T)判断 S 是否是 T 的超集S.isdisjoint(T)判断和 T 是否有交集S T、S ! T判断 S 和 T 是否相等S - T差更新集合 S包括在集合 S 但不在 T 中的元素S T交更新集合 S包括同时在集合 S 和 T 中的元素S ^ T补更新集合 S包括集合 S 和 T 中的非相同元素S - T、S T 、S ^ T、S | T快捷运算符等同于S S op T
以下是常用的集合函数
集合函数说明set(x)将其他类型变量 x 转变为集合类型S.add(x)如果 x 不在集合 S 中将 x 增加到 SS.update(x)将 x 中的各个元素分别添加到集合中x 可以是元组、列表、集合S.discard(x)移除 S 中元素 x如果 x 不在集合 S 中不报错S.remove(x)移除 S 中元素 x如果 x 不在集合 S 中产生 KeyError 异常S.clear()移除 S 中所有元素S.pop()随机删除 S 的一个元素S 为空集则产生 KeyError 异常S.copy()返回集合 S 的一个副本len(S)返回集合 S 的元素个数x in S , x not in S判断 S 中是否含有元素 x
集合是Python中的基础数据结构它们在许多应用场景中都很有用例如
去重数据 集合中的元素是唯一的因此它们经常用于从重复数据中获取唯一值。你可以将一个列表或其他可迭代对象转换为集合以轻松去除重复元素。成员检查 你可以使用集合来快速检查某个元素是否存在于集合中。这比在列表或其他数据结构中进行线性搜索更加高效。集合运算 集合支持并集、交集、差集等数学操作因此它们在处理数学问题时非常有用。例如查找两个集合的交集以找到共同的元素、排列组合、子集问题等。标记和过滤数据 你可以使用集合来标记或过滤数据。例如你可以创建一个包含兴趣爱好的集合然后筛选出符合特定兴趣爱好的人。网络和图算法 集合通常用于图算法中用于存储节点的邻居或其他特性。
6.2 序列 在Python中序列类型是一种数据结构用于存储一系列有序的元素。在python中字符串、列表、元组都是序列类型共享一些通用的特性和操作包括 有序性 序列中的元素是按照一定的顺序排列的每个元素都有一个唯一的位置索引。 可迭代性 你可以使用循环来遍历序列中的每个元素例如 for 循环。 索引访问 你可以使用索引来访问序列中的单个元素索引从0开始表示第一个元素。 切片操作 你可以使用切片slice来获取序列中的子序列。切片允许你指定起始索引、结束索引和步长。 长度 你可以使用内置函数 len() 来获取序列的长度即其中元素的数量。
以下是序列型通用的操作符和函数
序列操作符说明x in s如果 x 是序列 s 的元素返回 True否则返回 False。x not in s如果 x 是序列 s 的元素返回 False否则返回 True。s t连接两个序列 s 和 t。s * n 或 n * s将序列 s 复制 n 次。s[i]索引返回序列 s 中的第 i 个元素i 是序列的序号。s[i:j] 或 s[i:j:k]切片返回序列 s 中第 i 到 j 以 k 为步长的元素子序列。
# 创建两个元组
tuple1 (1, 2, 3, 4, 5)
tuple2 (5, 6, 7, 8, 9)# 使用操作符/函数
result1 3 in tuple1 # 判断元素是否存在于元组中返回True
concatenated_tuple tuple1 tuple2 # 连接两个元组
repeated_tuple tuple1 * 3 # 将元组重复3次
slice_of_tuple tuple2[1:4] # 获取元组中索引1到3的子序列# 输出结果
print(3 in tuple1:, result1)
print(Concatenated Tuple:, concatenated_tuple)
print(Repeated Tuple:, repeated_tuple)
print(Slice of Tuple2:, slice_of_tuple)3 in tuple1: True
Concatenated Tuple: (1, 2, 3, 4, 5, 5, 6, 7, 8, 9)
Repeated Tuple: (1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
Slice of Tuple2: (6, 7, 8)序列函数说明len()返回序列的长度元素个数max()返回序列中的最大元素min()返回序列中的最小元素index()返回指定元素的索引第一次出现的位置count()返回指定元素在序列中出现的次数sorted()返回一个排序后的序列副本reversed()返回一个反向的序列副本 因为sort是对被操作对象进行原地修改所以不适用于元组和字符串但是sorted函数可以。 6.2.1 元组 元组是一种有序的不可变序列与列表相似但不可以修改。元组使用圆括号 () 表示内部的各个值用逗号隔开。元组可以包含不同类型的元素只有一个元素的元组可以通过在这个元素后添加逗号来构建。
singleton hello,
singleton(hello,)元组也可以进行索引和解包操作
t 1, 2, 3, 4, 5
u t, (1, Hello, 3.14) # 结果是((1, 2, 3, 4, 5), (1, Hello, 3.14))
x ,y ,z u[1]
x ,y ,z(1, Hello, 3.14)元组Tuples是Python中的一种有序、不可变的数据结构它们在许多应用场景中都非常有用例如
多个返回值 函数可以返回多个值这些值可以用元组打包。在调用函数时可以将元组解包为多个变量从而轻松获取多个返回值。不可变性 元组的不可变性使它们适合用于表示不应更改的数据如日期、时间戳或配置参数这可以确保数据的完整性通常配置文件用元组来保存参数。不可更改的键 元组可以用作字典的键因为它们是不可变的而列表不行。这使得元组在创建自定义字典或映射数据时很有用。函数参数 在函数定义和调用中元组可用于传递一组参数。这对于编写可接受不定数量参数的函数非常有用。
6.2.2 列表
6.2.2.1 列表常用函数 列表是Python中最常用的数据结构之一它用于存储一组有序的元素。列表是可变的这意味着你可以在列表创建后添加、删除或修改元素。你使用方括号[]或list()创建列表列表元素之间用逗号分隔。以下是常用的列表函数和操作序列函数也适用
操作/函数说明ls[i]x替换列表 ls 中的第 i 个元素为 x。ls[i:j:k]lt用新列表 lt 替换列表 ls 中切片后的相应元素子列表如果只是新命名相当于删除元素。del ls[i]删除列表 ls 中的第 i 个元素。del ls[i:j:k]删除列表 ls 中第 i 到第 j 以步长 k 的元素。lslt将列表 lt 的元素添加到列表 ls 中更新 ls。ls*n重复列表 ls 中的元素 n 次更新 ls。ls.append(x)向列表 ls 的末尾添加元素 x不创建新对象。ls.extend(iterable)将可迭代对象 iterable 的所有元素添加到列表 ls 的末尾无需创建新对象。ls.clear()清空列表 ls 中的所有元素。ls.copy()创建一个新的列表复制列表 ls 中的所有元素。ls.insert(i, x)在列表 ls 的第 i 个位置插入元素 x。ls.pop(i)删除列表 ls 中第 i 个位置的元素如果未指定 i默认删除最后一个元素。不存在报错 ValueErrorls.remove(x)删除列表 ls 中第一次出现的元素 x。如果没有找到不报错。
6.2.2.2 列表推导式 列表推导式可以在一行代码中创建列表而不需要显式编写循环所以语法更加的简洁。列表推导式常见的用法是对序列或可迭代对象中的每个元素应用某种操作其一般形式如下
new_list [expression for item in iterable if condition]new_list将生成的新列表的名称。expression定义如何转换和处理可迭代对象中的每个元素的表达式。item代表可迭代对象中的每个元素的变量名。iterable可迭代对象可以是列表、元组、字符串、集合、字典的键等。condition可选用于筛选元素的条件只有满足条件的元素才会包含在新列表中。
下面是一些列表推导式的示例以帮助您更好地理解
生成一个数字列表
numbers [x for x in range(1, 6)] # 生成1到5的数字列表[1, 2, 3, 4, 5]从字符串中提取元音字母
text Hello, World!
vowels [char for char in text if char.lower() in aeiou] # 提取元音字母[e, o, o, o]筛选元组注意下面代码中for 和 if 的顺序相同
[(x, y) for x in [1,2,3] for y in [3,1,4] if x ! y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]这等价于
combs []
for x in [1,2,3]:for y in [3,1,4]:if x ! y:combs.append((x, y))combs使用嵌套函数
from math import pi
[str(round(pi, i)) for i in range(1, 6)][3.1, 3.14, 3.142, 3.1416, 3.14159]嵌套列表推导式 列表推导式中的初始表达式可以是任何表达式甚至可以是另一个列表推导式
matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened [x for row in matrix for x in row] # 嵌套列表展开
matrix_T[[row[i] for row in matrix] for i in range(4)] # 转置矩阵的行和列打印出来结果如下
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]实际应用中最好用内置函数替代复杂的流程语句。此时zip() 函数更好用
list(zip(*matrix))[(1, 4, 7), (2, 5, 8), (3, 6, 9)]列表推导式不仅简化了代码还提高了代码的可读性。但请注意过度复杂的列表推导式可能会降低代码的可读性因此在使用时要保持适度。如果列表推导式变得太复杂可能更适合使用传统的循环结构。
习题下面是由三重循环写出的矩阵乘法公式请改写为列表推导式。
import numpy as np
M1 np.random.rand(2,3)
M2 np.random.rand(3,4)
res np.empty((M1.shape[0],M2.shape[1]))
for i in range(M1.shape[0]):for j in range(M2.shape[1]):item 0for k in range(M1.shape[1]):item M1[i][k] * M2[k][j]res[i][j] item((M1M2 - res) 1e-15).all() # 排除数值误差#三层for循环就用三层列表最外层for循环写在列表推导式的最外面
res[[sum([M1[i][k]*M2[k][j] for k in range(M1.shape[1])]) for j in range(M2.shape[1])] for i in range(M1.shape[0])]
resnp.array(res)
res.shape, ((M1M2 - res) 1e-15).all()6.3 字典
6.3.1 字典基本操作 字典是Python中非常重要且常用的数据结构之一它允许您将数据存储为键-值对的集合。你可以使用花括号 {} 或者使用内置的 dict() 函数来创建字典。需要注意的是字典中的键必须是不可变的通常是字符串、整数或元组而值可以是任何类型的数据。 要添加新的键值对或者修改现有键的值只需为字典指定新的键值对即可
# 使用花括号创建字典
my_dict {name: Alice, age: 30, city: New York}# 添加新的键值对
my_dict[email] aliceexample.com# 修改现有键的值
my_dict[age] 31# 删除指定的键值对
del my_dict[city]以下是常见的字典操作
操作/函数说明k in d判断键 k 是否在字典 d 中如果存在返回 True否则返回 False。d.keys()返回字典 d 中所有的键信息返回类型为 dict_keys可以使用 list() 转换成列表。d.values()返回字典 d 中所有的值信息返回类型为 dict_values可以使用 list() 转换成列表。d.items()返回字典 d 中所有键值对信息返回类型为 dict_items可以使用 list() 转换成元组列表。d.get(k, default)如果键 k 存在于字典中则返回相应值否则返回 default 值默认返回 None。d.pop(k, default)如果键 k 存在于字典中则取出相应值否则返回 default 值。d.popitem()随机从字典 d 中取出一个键值对以元组形式返回。del d[k]删除字典 d 中 k 的键值对。如果键不存在将引发 KeyError 错误。d.clear()删除字典 d 中的所有键值对。len(d)返回字典 d 中元素的个数。sum(d)默认累加字典 d 的键值前提是键是数字。
6.3.2 字典推导式
字典推导式是一种用于创建字典的紧凑而强大的语法类似于列表推导式。字典推导式的一般形式如下
{key_expression: value_expression for item in iterable}key_expression用于计算字典键的表达式。value_expression用于计算字典值的表达式。item代表可迭代对象中的每个元素的变量名。iterable可迭代对象可以是列表、元组、字符串、集合等。
字典推导式会遍历可迭代对象中的每个元素为每个元素计算键和值然后构建一个新的字典。以下是一些字典推导式的示例
从列表创建字典
fruits [apple, banana, cherry]
fruit_lengths {fruit: len(fruit) for fruit in fruits}
# 结果{apple: 5, banana: 6, cherry: 6}从两个列表创建字典若两个列表元素数量不一致以少的那个为基准生成字典
keys [a, b, c]
values [1, 2]
dictionary {k: v for k, v in zip(keys, values)}
# 结果{a: 1, b: 2}筛选出偶数并创建字典
numbers [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_squared {n: n**2 for n in numbers if n % 2 0}
# 结果{2: 4, 4: 16, 6: 36, 8: 64}从字符串创建字典
text hello
char_to_ord {char: ord(char) for char in text}
# 结果{h: 104, e: 101, l: 108, o: 111}6.3.3 统计三国出场人物生成词云 这个是当初慕课上面Python语言程序设计里的一个示例印象比较深所以写一下。三国演义文本文件地址为https://python123.io/resources/pye/threekingdoms.txt。WordCloud生成中文词云会有乱码可以在Google Fonts下载中文字体ttf文件然后在生成词云时指定字体路径。 import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud# 1. 读取文本文件
with open(threekingdoms.txt, r, encodingutf-8) as file:text file.read()# 2. 使用jieba进行分词
words jieba.cut(text)# 3. 创建一个字典来统计词频
word_counts {}# 4. 统计词频
for word in words:if len(word)1:continue elif word in [诸葛亮,孔明曰]:rword孔明elif word in [关公,云长]:rword关羽elif word in [玄德,玄德曰]:rword刘备elif word in [孟德,丞相]:rword曹操else:rwordword# get 方法接受一个键作为参数如果键存在于字典中则返回与该键关联的值否则返回指定的默认值word_counts[rword] word_counts.get(rword, 0) 1# 5. 过滤非人名的高频词
exclude[将军,却说,荆州,二人,不可,不能,如此,商议,主公,左右,如何,军士,军马,东吴,大喜,引兵, 次日, 天下, 于是, 今日, 不敢, 魏兵, 陛下, 一人, 都督, 人马, 不知, 汉中, 只见, 众将, 后主, 蜀兵, 上马, 大叫]
for word in exclude:del word_counts[word]# 6. 获取词频最高的前10个人物并打印
top_words sorted(word_counts.items(), keylambda x: x[1], reverseTrue)[:10]
print(词频最高的前10个词:)
for word, count in top_words:print({0:10}{1:5}.format(word,count))# 7. 生成词云并显示
font_path MaShanZheng-Regular.ttf
wordcloud WordCloud(width800, height400, background_colorwhite,font_pathfont_path).generate_from_frequencies(word_counts)plt.figure(figsize(10, 5))
plt.imshow(wordcloud, interpolationbilinear)
plt.axis(off)
plt.show()