当前位置: 首页 > news >正文

从零开始学Python之数据结构(字符串以及数字)

一、字符串

1.1 怎么定义字符串

字符串是Python最常用的数据结构之一。在 Python 里是用于处理文本数据的,比如存储姓名、文章内容等文本信息 。

  • 定义方式
    • 单引号:用单引号 ' ' 包裹文本,如 name = 'Alice' ,单引号内可正常包含除单引号之外的字符,若要包含单引号,需进行转义,像 sentence = 'He said, \'Hello!\'' 。
    • 双引号:用双引号 " " 包裹文本,例如 message = "Hello, world!" ,在需要包含单引号时较为方便,如 quote = "He said, 'Hello!'" 。
    • 三重单引号:分为三重单引号 ''' ''' 和三重双引号 """ """ 。常用于定义多行字符串。

使用的时候两种方式:

  • 一种双引号里有双引号,那么里面的双引号就用\进行转译。
  • 另一种直接最外面使用单引号,里面也可以直接使用双引号。见下图。

1.2 如何使用字符串中的变量

  • 使用场景:当我们需要在字符串中插入变量的值时,可采用 f - strings 这种方式。比如有变量存储姓名、年龄等信息,想把这些信息整合到一个描述性字符串中,就会用到。
  • 语法格式:f - strings 以 f 开头,后面跟着用大括号 {} 包裹的变量名,即 f"{变量名}" 。示例如下:
  • name = "Alice"
    age = 25
    message = f"My name is {name} and I'm {age} years old."
    print(message)
    # 输出:My name is Alice and I'm 25 years old.

1.3 字符串的基本操作

in :表达式 x in s ,其中 x 是要查找的元素,s 是目标字符串。如果 x 是 s 的子字符串或字符,返回 True ,否则返回 False 。例如:

s = "hello world"
print('ll' in s)  # 输出 True
print('abc' in s)  # 输出 False

not in :表达式 x not in s ,功能与 in 相反,当 x 不是 s 的子字符串或字符时,返回 True ,否则返回 False 。例如:

s = "hello world"
print('abc' not in s)  # 输出 True
print('ll' not in s)  # 输出 False

+ 运算符:用于连接两个字符串。将 s 和 t 两个字符串首尾相连,生成一个新的字符串。例如:

s = "Hello"
t = "World"
result = s + t
print(result)  # 输出 HelloWorld

* 运算符:用于字符串重复。s * t 表示将字符串 s 重复 t 次,t 必须是整数。例如:

s = "Hi"
t = 3
result = s * t
print(result)  # 输出 HiHiHi

 

s[i]:用于获取字符串 s 中索引为 i 的单个字符。在 Python 中,字符串索引从 0 开始。例如:

s = "hello"
print(s[1:3])  # 输出 'el'
# 如果索引为负数,则从字符串末尾开始计数,-1 表示最后一个字符 ,如 print(s[-1]) 会输出 'o' 。

s[i:j]:获取字符串 s 的子串,范围是从索引 i (包含)到索引 j (不包含)。例如:

s = "hello"
print(s[1:3])  # 输出 'el'
# 如果 i 省略,默认从字符串开头(索引 0 )开始;如果 j 省略,默认到字符串末尾 。比如 s[:3] 等价于 s[0:3] ,s[1:] 等价于 s[1:len(s)] 。

s[i:j:k]:在 s[i:j] 的基础上,增加了步长 k ,表示每隔 k - 1 个字符取一个字符。例如:

s = "hello"
print(s[::2])  # 输出 'hlo' ,从开头到结尾,每隔1个字符取一个
# k 为负数时,表示反向切片。比如 s[::-1] 可以将字符串 s 反转 ,对于 s = "hello" ,s[::-1] 输出为 'olleh' 。

1.4 字符串的常用方法

4.1 str.count(sub[, start[, end]])

  • 功能:统计子字符串 sub 在指定字符串 str 中,位于 start(起始索引,包含)到 end(结束索引,不包含)范围内非重叠出现的次数 。start 和 end 为可选参数,若省略,默认在整个字符串中统计。
  • 示例
s = "hello world hello"
print(s.count('hello'))  # 输出 2
print(s.count('l', 0, 5))  # 在索引0到4范围内统计'l'出现次数,输出 2

4.2 str.isalnum()

  • 功能:判断字符串 str 中的所有字符是否都是字母或数字,且字符串至少有一个字符。满足条件返回 True ,否则返回 False 。
  • 示例
s1 = "abc123"
s2 = "abc!123"
s3 = ""
print(s1.isalnum())  # 输出 True
print(s2.isalnum())  # 输出 False ,因包含'!'非字母数字字符
print(s3.isalnum())  # 输出 False ,字符串为空

4.3 str.isalpha()

  • 功能:判断字符串 str 中的所有字符是否都是字母,且字符串至少有一个字符。满足条件返回 True ,否则返回 False 。
  • 示例
s1 = "abc"
s2 = "abc123"
s3 = ""
print(s1.isalpha())  # 输出 True
print(s2.isalpha())  # 输出 False ,因包含数字
print(s3.isalpha())  # 输出 False ,字符串为空

4.4 str.join(iterable)

  • 功能:以 str 作为分隔符,将可迭代对象 iterable(如列表、元组等,其中元素需为字符串)中的字符串拼接起来,返回拼接后的新字符串。
  • 示例
s = "-"
lst = ["apple", "banana", "cherry"]
result = s.join(lst)
print(result)  # 输出 apple-banana-cherry

4.5 str.split(sep=None, maxsplit=-1)

  • 功能:根据分隔符 sep 对字符串 str 进行分割。若 sep 为 None,则按空白字符(空格、换行符等)分割;maxsplit 限制最多分割次数,-1 表示无限制。返回分割后的字符串列表。
  • 示例
s = "hello world python"
print(s.split())  # 输出 ['hello', 'world', 'python']
print(s.split('l', 1))  # 按'l'分割,最多分割1次,输出 ['he', 'lo world python']

4.6 str.startswith(prefix[, start[, end]])

  • 功能:检查字符串 str 从索引 start(包含)到索引 end(不包含)的部分是否以指定的 prefix 开头,满足则返回 True,否则返回 Falsestart 和 end 为可选参数,省略时检查整个字符串。
  • 示例
s = "hello world"
print(s.startswith('he'))  # 输出 True
print(s.startswith('wo', 6))  # 从索引6开始检查是否以'wo'开头,输出 True

二、数字类型

2.1 数字类型介绍

用途:Python 的数字类型在数学计算(如加减乘除、幂运算等)和统计(如求均值、方差等)场景中广泛应用 。

种类

    • 整数:表示没有小数部分的数,像 1-5 等。Python 中的整数没有大小限制,可表示非常大或非常小的整数。
    • 浮点数:用于表示带有小数部分的数,如 3.14-2.5 。在计算机中,浮点数采用二进制表示,可能存在精度问题,例如 0.1 + 0.2 并不精确等于 0.3 。
    • 复数:形式为 a + bj ,其中 a 是实部,b 是虚部 ,j 表示虚数单位(在 Python 中用 j 表示),例如 3 + 4j 。复数常用于科学计算、信号处理等领域。

创建方式:可以通过直接写数字字面值(如 53.14 )创建数字,也能通过内置函数(如 int()float() 等)和运算符(如 +* 等)的运算结果来创建 。比如 a = int('5') ,b = 2 + 3 。

2.2 数字类型函数介绍

关于 Python 中数字类型常见运算如下:

算术运算:

  1. 加法(x + y:计算 x 和 y 两个数字的总和。例如 3 + 5 结果为 8 ,可以用于整数、浮点数运算,也支持不同数字类型混合运算,如 3 + 2.5 结果为 5.5 。
  2. 减法(x - y:求 x 与 y 的差值。比如 7 - 4 结果是 3 。
  3. 乘法(x * y:计算 x 和 y 的乘积。像 4 * 6 等于 24 。
  4. 除法(x / y:返回 x 除以 y 的商,结果是浮点数。例如 9 / 2 结果为 4.5 。
  5. 整除(x // y:得到 x 除以 y 的商的整数部分,舍去小数部分。如 9 // 2 结果是 4 。
  6. 取余(x % y:求出 x 除以 y 的余数。例如 9 % 2 结果为 1 。

符号运算:

  1. 取反(-x:改变数字 x 的符号,正数变为负数,负数变为正数 。比如 x = 5 ,-x 就是 -5 ;x = -3 ,-x 则是 3 。
  2. 保持不变(+x:对数字 x 不做任何改变,x 是多少,+x 就是多少 。例如 x = 7 ,+x 依然是 7 。

数值处理运算:

  1. abs(x):返回数字 x 的绝对值,若 x 是整数或浮点数,就是其到原点的距离;若 x 是复数,则返回复数的模。例如 abs(-5) 结果为 5 ,abs(3 + 4j) 结果为 5.0 。
  2. int(x):将 x 转换为整数。若 x 是浮点数,会向下取整,如 int(3.8) 结果是 3 ;若 x 是字符串,只要字符串内容是合法整数形式(如 '5' ),就能转换为对应整数。
  3. float(x):把 x 转换为浮点数。若 x 是整数,会在末尾添加 .0 ,如 float(5) 结果是 5.0 ;若 x 是字符串,只要字符串内容是合法数字形式(如 '3.14' ),就能转换为浮点数。
  4. complex(re, im):创建一个复数,实部为 re ,虚部为 im ,im 默认为 0 。比如 complex(3) 得到 3+0j ,complex(3, 4) 得到 3 + 4j 。
  5. c.conjugate():对于复数 c ,返回其共轭复数,即实部不变,虚部取反。例如复数 c = 3 + 4j ,c.conjugate() 结果是 3 - 4j 。

2.3 数字类型转换

Python 是 强类型编程语言,意味着变量的类型一旦确定,就不会自动进行类型转换(除非是显式操作),不同类型的数据在进行运算时,不会像弱类型语言那样自动隐式转换,以保证数据类型的安全性和严谨性 。

(1)类型查看

使用 type() 函数可以获取对象的类型。例如:

a = 5
print(type(a))  # 输出 <class 'int'>
b = 3.14
print(type(b))  # 输出 <class 'float'>

(2)类型转换

  • int():用于将符合条件的值转换为整数。可以将浮点数转换为整数(向下取整,如 int(3.8) 结果为 3 );也能将表示整数的字符串(如 '5' )转换为整数 ,但字符串内容必须是合法整数形式,否则会报错。
  • float():可把整数或表示数字的字符串转换为浮点数。整数转换时会在末尾添加 .0 ,如 float(5) 结果是 5.0 ;只要字符串内容是合法数字形式(如 '3.14' )就能转换为浮点数。

2.4 数字与字符串转换

(1)数字转字符串

使用 str() 函数可以将数字转换为字符串。无论是整数、浮点数还是复数,都能通过该函数转换。例如:

num_int = 5
num_float = 3.14
num_complex = 2 + 3j
print(str(num_int))  # 输出 '5'
print(str(num_float))  # 输出 '3.14'
print(str(num_complex))  # 输出 '(2+3j)'

(2)字符串转整数

int() 函数用于将字符串转换为整数,但要求字符串的内容必须是合法的整数表示形式,比如 '123' 。如果字符串中包含非数字字符(除了正负号 ),转换时就会报错。示例如下:

s1 = '10'
s2 = 'abc'
print(int(s1))  # 输出 10
# print(int(s2))  # 会报错,因为 'abc' 不是合法整数形式

注意:int()只能将只含整数的字符串转换,否则报错。

三、补充

Python、Java 都属于强类型编程语言。在这类语言中,每个变量都有明确且固定的数据类型,一旦定义好就不能随意改变。

3.1 类型稳定性

数据类型不会因为运算等操作而自动改变。例如在 Python 中,整数 5 与浮点数 3.14 相加,5 不会自动转换为浮点数再运算,而是系统会根据规则将整数隐式转换为浮点数后进行运算,但这不是变量类型中途改变,而是遵循语言的运算规则。又如在 Java 中,定义 int a = 5; ,a 的类型始终是 int ,不会因为参与运算就变成其他类型。

3.2 类型转换方式

若要改变数据类型,必须通过显式的类型转换操作。在 Python 中,使用 int()float()str() 等函数进行转换;在 Java 中,使用强制类型转换(如 (int)3.14 把 3.14 强制转换为整数 )或者自动装箱拆箱机制(针对基本数据类型和包装类之间)等方式。 显式转换能让开发者清楚知道类型变化,增强代码的可读性和稳定性。

http://www.dtcms.com/a/330582.html

相关文章:

  • Java 大视界 -- Java 大数据机器学习模型在金融欺诈检测与防范策略制定中的应用(397)
  • 工业一体机5G通讯IC/ID刷卡让MES系统管理更智能
  • 第四天~在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号实战
  • 怎么判断晶振的好坏,有什么简单的办法
  • AR技术赋能电力巡检:智能化升级的“秘密武器”
  • 计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
  • 设计模式笔记_行为型_责任链模式
  • 【论文阅读 | CVPR 2024 | UniRGB-IR:通过适配器调优实现可见光-红外语义任务的统一框架】
  • linux 内核 - 内存管理的层次化结构
  • UE5配置MRQ编解码器输出MP4视频
  • Linux网络编程:应用层自定义协议与序列化
  • 《量子雷达》第5章 量子雷达发射机 预习2025.8.14
  • 人工智能——卷积神经网络自定义模型全流程初识
  • .NET 的 WebApi 项目必要可配置项都有哪些?
  • CPUcores-【硬核优化】CPU增强解锁全部内核!可优化游戏性能、提升帧数!启用CPU全内核+超线程,以更高优先级运行游戏!支持各种游戏和应用优化~
  • Mybatis学习笔记(四)
  • 【论文阅读】基于卷积神经网络和预提取特征的肌电信号分类
  • CSS isolation属性
  • NVIDIA Nsight Deep Learning Designer使用
  • 第3节 深度学习避坑指南:从过拟合到玄学优化
  • toRefs、storeToRefs实际应用
  • 分布式系统架构设计模式:从微服务到云原生
  • Flutter sqflite插件
  • Day57--图论--53. 寻宝(卡码网)
  • Nacos-4--Nacos1.x长轮询的理解
  • PiscTrace基于YOLO追踪算法的物体速度检测系统详解
  • 【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线
  • 【入门级-算法-2、入门算法:模拟法】
  • 解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题
  • 融合服务器助力下的电视信息发布直播点播系统革新