当前位置: 首页 > 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)  # 所有空白字符

相关文章:

  • 微处理器原理与应用篇---计算机系统的结构、组织与实现
  • 七、Redis的持久化策略
  • 前端实现截图的几种方法
  • aardio 并行任务处理
  • 对接支付宝,阿里云沙箱服务
  • AWS VPC 子网划分实战指南:从基础到进阶
  • Z-Ant开源程序是简化了微处理器上神经网络的部署和优化
  • Rust自动化测试的框架
  • C++ - vector 的使用
  • Python的6万张图像数据集CIFAR-10和CIFAR-100说明
  • 软件工程概述:核心概念、模型与方法全解析
  • Linux编程:5、进程通信-命名管道
  • 从流量为王到留量为王:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径
  • Skrill是什么?中国用户能用吗?安全吗?完整指南
  • Spring Boot + MyBatis + Vue:全栈开发的深度剖析与实践指南
  • WINUI/WPF——Button不同状态下图标切换
  • DM8故障分析工具-AWR报告
  • mysql导入大sql(比如10GB的sql文件)
  • Kubernetes核心技术原理详解
  • Linux文件元信息完全指南:权限、链接与时间属性
  • 深圳软件开发公司在哪里/淮南网站seo
  • 做个网站做什么呢/百度网盘官网下载
  • 网站建设优化服务价位/南京seo建站
  • 桂林论坛网网站电话/百度热搜关键词排名优化
  • 湖南张家界建设局网站/最好的免费建站网站
  • 大连手机自适应网站建设公司/武汉seo网站排名