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

Python元组及字符串

元组

元组(tuple)是Python中一种不可变的有序序列类型,与列表(list)类似但一旦创建就不能修改。

在 Python 语言中,元组也是多个元素按照一定顺序构成的序列。元组和列表的不同之处在于,元组是不可变类型,这就意味着元组类型的变量一旦定义,其中的元素不能再添加或删除,而且元素的值也不能修改。如果试图修改元组中的元素,将引发TypeError错误,导致程序崩溃。定义元组通常使用形如(x, y, z)的字面量语法,元组类型支持的运算符跟列表是一样的

1. 元组创建

# 空元组
empty_tuple = ()
empty_tuple = tuple()# 单元素元组(注意逗号)
single_tuple = (1,)  # 正确
not_a_tuple = (1)    # 错误,这只是一个整数# 多元素元组
numbers = (1, 2, 3, 4, 5)
mixed = (1, "hello", 3.14, True)# 从其他序列创建
tuple_from_list = tuple([1, 2, 3])  # (1, 2, 3)
tuple_from_str = tuple("abc")       # ('a', 'b', 'c')

2. 元组基本操作

访问元素

t = (10, 20, 30, 40, 50)# 索引访问
print(t[0])   # 10
print(t[-1])  # 50 (最后一个元素)# 切片操作
print(t[1:3])   # (20, 30)
print(t[:2])    # (10, 20)
print(t[2:])    # (30, 40, 50)
print(t[::-1])  # (50, 40, 30, 20, 10) 反转元组

元组解包

# 基本解包
a, b, c = (1, 2, 3)
print(a, b, c)  # 1 2 3# 使用*收集剩余元素
first, *middle, last = (1, 2, 3, 4, 5)
print(first)    # 1
print(middle)   # [2, 3, 4] (注意是列表)
print(last)     # 5# 交换变量
x, y = 10, 20
x, y = y, x     # 交换x和y的值# 打包操作
a = 1, 10, 100
print(type(a))  # <class 'tuple'>
print(a)        # (1, 10, 100)
# 解包操作
i, j, k = a
print(i, j, k)  # 1 10 100

3. 元组方法

t = (1, 2, 2, 3, 4)# count() - 统计元素出现次数
print(t.count(2))  # 2# index() - 返回元素第一次出现的索引
print(t.index(3))  # 3

4. 元组运算

t1 = (1, 2, 3)
t2 = (4, 5, 6)# 拼接
print(t1 + t2)  # (1, 2, 3, 4, 5, 6)# 重复
print(t1 * 3)   # (1, 2, 3, 1, 2, 3, 1, 2, 3)# 成员测试
print(2 in t1)  # True
print(5 not in t1)  # True

5. 元组与函数

# 作为函数参数和返回值
def min_max(numbers):return min(numbers), max(numbers)result = min_max([1, 2, 3, 4, 5])  # 返回(1, 5)
min_val, max_val = result
print(f'最小值: {min_val}, 最大值: {max_val}')# 作为可变长度参数
def print_args(*args):print(args)  # args是一个元组print_args(1, 2, 3)  # 输出: (1, 2, 3)

字符串

字符串,就是由零个或多个字符组成的有限序列

在 Python 程序中,我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。字符串中的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji 字符(如:💩、🐷、🀄️)等。

s1 = 'hello, world!'
s2 = "你好,世界!❤️"
s3 = '''hello,
wonderful
world!'''
print(f"s1: {s1}")
print(f"s2: {s2}")
print(f"s3: {s3}")# 空字符串
empty_str = ""
empty_str = str()
print(f" empty_str: {empty_str}")# 转义字符
escaped = "He said, \"Python is great!\""
new_line = "Line1\nLine2"
tab_char = "Name\tAge"
print(f"escaped: {escaped}")
print(f"new_line: {new_line}")
print(f"tab_char: {tab_char}")

字符串基本操作

访问字符

s = "Python"# 索引访问
print(s[0])    # 'P'
print(s[-1])   # 'n' (最后一个字符)# 切片操作
print(s[1:4])  # 'yth'
print(s[:3])   # 'Pyt'
print(s[3:])   # 'hon'
print(s[::-1]) # 'nohtyP' (反转字符串)

字符串拼接

# + 运算符
greeting = "Hello" + " " + "World"  # "Hello World"
print(f"greeting: {greeting}")
# * 重复
stars = "*" * 10  # "**********"
print(f"stars: {stars}")
# join() 方法
words = ["Python", "is", "awesome"]
sentence = " ".join(words)  # "Python is awesome"
print(f"sentence: {sentence}")

字符串常用方法

大小写转换

s = "Python Programming"# 大写转换小写
print(s.lower())      # "python programming"
# 小写转换大写
print(s.upper())      # "PYTHON PROGRAMMING"
# 首字母大写
print(s.title())      # "Python Programming"
# 首字母大写
print(s.capitalize()) # "Python programming"
# 大小写互换
print(s.swapcase())   # "pYTHON pROGRAMMING"

字符串查找

s = "Python is fun, Python is powerful"print(s.find("Python"))     # 0 (返回首次出现的索引)
print(s.rfind("Python"))    # 15 (从右向左查找)
print(s.index("is"))        # 7 (类似find但找不到会报错)
print(s.rindex("is"))       # 22
print("Python" in s)        # True
print("Java" not in s)      # True

字符串替换

s = "Python is good, Python is great"# 简单替换
print(s.replace("Python", "Java"))  # "Java is good, Java is great"# 指定替换次数
print(s.replace("Python", "Java", 1))  # "Java is good, Python is great"# 翻译表替换
trans = str.maketrans("aeiou", "12345")
print("apple".translate(trans))  # "1ppl2"

字符串分割与连接

s = "Python,Java,C++,JavaScript"# 分割
print(s.split(","))      # ['Python', 'Java', 'C++', 'JavaScript']
print(s.split(",", 2))   # ['Python', 'Java', 'C++,JavaScript']# 按行分割
multiline = "Line1\nLine2\nLine3"
print(multiline.splitlines())  # ['Line1', 'Line2', 'Line3']# 分区
print(s.partition(","))  # ('Python', ',', 'Java,C++,JavaScript')
print(s.rpartition(",")) # ('Python,Java,C++', ',', 'JavaScript')

字符串格式化

# % 格式化 (旧式)
print("Name: %s, Age: %d" % ("Alice", 25))# str.format() 方法
print("Name: {}, Age: {}".format("Bob", 30))
print("Name: {1}, Age: {0}".format(30, "Bob"))
print("PI: {:.2f}".format(3.14159))# f-strings (Python 3.6+)
name = "Charlie"
age = 35
print(f"Name: {name}, Age: {age}")
print(f"Next year: {age+1}")
print(f"Upper name: {name.upper()}")

字符串检查

s = "Python123"print(s.isalnum())    # True (字母或数字)
print(s.isalpha())    # False (纯字母)
print(s.isdigit())    # False (纯数字)
print(s.islower())    # False (全小写)
print(s.isupper())    # False (全大写)
print(s.isspace())    # False (全空白)
print(s.startswith("Py"))  # True
print(s.endswith("23"))    # True

字符串修剪

s = "   Python   "print(s.strip())      # "Python" (去两边空格)
print(s.lstrip())     # "Python   " (去左边空格)
print(s.rstrip())     # "   Python" (去右边空格)s2 = "+++Python!!!"
print(s2.strip("+!")) # "Python" (去指定字符)

字符串编码与字节

# 字符串与字节转换
s = "Python编程"
b = s.encode("utf-8")  # b'Python\xe7\xbc\x96\xe7\xa8\x8b'
s2 = b.decode("utf-8") # "Python编程"
print(f"s: {s}")
print(f"b: {b}")
print(f"s2: {s2}")
# 常见编码
print("你好".encode("gbk"))  # b'\xc4\xe3\xba\xc3'
test=b'\xc4\xe3\xba\xc3'.decode("gbk")
print(test)  # "你好"

字符串格式化高级

# 对齐与填充
print(f"{'Python':<10}")   # 'Python    ' (左对齐)
print(f"{'Python':>10}")   # '    Python' (右对齐)
print(f"{'Python':^10}")   # '  Python  ' (居中对齐)
print(f"{'Python':*^10}")  # '**Python**' (填充*)# 数字格式化
num = 1234.5678
print(f"{num:,}")        # 1,234.5678 (千分位)
print(f"{num:.2f}")      # 1234.57 (保留2位小数)
print(f"{num:10.2f}")    # '   1234.57' (宽度10)
print(f"{num:.2e}")      # 1.23e+03 (科学计数法)# 进制转换
n = 42
print(f"{n:b}")  # 101010 (二进制)
print(f"{n:o}")  # 52 (八进制)
print(f"{n:x}")  # 2a (十六进制)

字符串性能优化

# 避免在循环中使用+拼接字符串
# 不好的做法
result = ""
for i in range(10000):result += str(i)  # 每次创建新字符串
print(f"result: {result}")# 好的做法
parts = []
for i in range(10000):parts.append(str(i))
result = "".join(parts)
print(f"result: {result}")

原始字符串

# 原始字符串(忽略转义)
path = r"C:\new_folder\test.txt"  # 反斜杠不会被转义
print(path)  # C:\new_folder\test.txt

字符串常量

import stringprint(string.ascii_letters)  # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
print(string.ascii_lowercase)  # 'abcdefghijklmnopqrstuvwxyz'
print(string.ascii_uppercase)  # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print(string.digits)  # '0123456789'
print(string.hexdigits)  # '0123456789abcdefABCDEF'
print(string.octdigits)  # '01234567'
print(string.punctuation)  # 所有标点符号
print(string.whitespace)  # 所有空白字符
http://www.lryc.cn/news/573103.html

相关文章:

  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 服务发现与动态负载均衡的结合
  • 零基础学习Redis(12) -- Java连接redis服务器
  • c++26新功能—hive容器
  • gRPC 框架面试题精选及参考答案
  • SVN上传代码
  • 力扣1546. 和为目标值且不重叠的非空子数组的最大数目
  • 【09】设计并实现一套面向 Agent 任务规划的 DSL 语言
  • 针对机器人自修复材料的具体推荐及特性分析
  • vscode搭建spring boot项目
  • Qt、C++自定义按钮、组件、事件编程开发练习,万字实战解析!!
  • TMultiplexedProtocol 和 TMultiplexedProcessor
  • 使用Vue3开发Electorn桌面应用
  • Maven-添加子模块
  • Vue2 day02
  • 记录一次:Java Web 项目 CSS 样式/图片丢失问题:一次深度排查与根源分析
  • 【STM32】STM32的中断系统寄存器NVIC、EXTI
  • Leetcode 440. 字典序的第K小数字
  • C++ CAN总线数据处理框架解析
  • 力扣1477. 找两个和为目标值且不重叠的子数组
  • YOLO官方自带的数据集Dotav1,直接训练
  • Python爬虫实战:研究threading相关技术
  • 状态模式详解
  • Filecoin系列 - IPLD 技术分析
  • verilog HDLBits刷题“Module shift8”--模块 shift8---模块和向量
  • Python 的内置函数 hasattr
  • 中国设计 全球审美 | 安贝斯新产品发布会:以东方美学开辟控制台仿生智造新纪元
  • 【Koa系列】10min快速入门Koa
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)