【Python 学习 / 4】基本数据结构之 字符串 与 集合

1. 字符串概念

1.1 字符串的创建

字符串(String)是由一系列字符组成的数据类型。在Python中,字符串是不可变类型,即一旦创建就不能修改其中的字符。

可以使用单引号 ' 或双引号 " 来创建字符串,也可以使用三引号(单引号或双引号)来创建多行字符串。

# 单引号创建字符串
a = 'hello'
print(type(a))  # <class 'str'>

# 双引号创建字符串
b = "world"
print(type(b))  # <class 'str'>

# 多行字符串,使用三引号
c = '''This is
a multi-line
string'''
print(c)

1.2 字符串的访问和操作

1.2.1 下标访问

字符串可以通过下标来访问每个字符。下标从0开始,也可以使用负数下标来从末尾访问字符。

a = "hello"
print(a[0])  # h
print(a[-1])  # o

1.2.2 切片操作

字符串支持切片操作,可以截取字符串的一部分。切片语法类似于列表:a[start:end:step]

a = "hello"
print(a[1:4])  # "ell"
print(a[:3])   # "hel"
print(a[::2])  # "hlo"

1.2.3 字符串的拼接和重复

使用 + 运算符可以拼接字符串,使用 * 运算符可以重复字符串。

a = "hello"
b = "world"
print(a + " " + b)  # "hello world"
print(a * 3)  # "hellohellohello"

1.2.4 字符串的长度

使用 len() 函数可以获取字符串的长度。

a = "hello"
print(len(a))  # 5

1.3 字符串的方法

字符串提供了许多常用的方法,以下是一些常用的字符串方法:

  • lower():将字符串转换为小写。
  • upper():将字符串转换为大写。
  • strip():去除字符串两端的空格。
  • replace():替换字符串中的指定字符。
  • split():将字符串按照指定的分隔符拆分成列表。
a = "  Hello World  "
print(a.lower())  # "hello world"
print(a.upper())  # "HELLO WORLD"
print(a.strip())  # "Hello World"
print(a.replace("World", "Python"))  # "  Hello Python  "
print(a.split())  # ['Hello', 'World']

1.4 字符串的查找和替换

  • innot in:用来判断子字符串是否存在于字符串中。
  • find():返回子字符串第一次出现的位置,如果不存在返回 -1
  • count():返回子字符串在字符串中出现的次数。
a = "hello world"
print("world" in a)  # True
print(a.find("world"))  # 6
print(a.count("l"))  # 3

1.5 字符串格式化

Python支持字符串格式化,通过%运算符或str.format()方法来实现。

1.5.1 使用 % 运算符

name = "John"
age = 25
print("My name is %s and I am %d years old." % (name, age))

1.5.2 使用 str.format()

print("My name is {} and I am {} years old.".format(name, age))

1.5.3 使用 f-string(Python 3.6 及以上版本)

print(f"My name is {
      
      name} and I am {
      
      age} years old.")

1.6 字符串的编码和解码

Python中的字符串是Unicode编码,而在处理文件或者网络通信时,可能需要将字符串转化为字节流(bytes)。可以使用encode()方法将字符串编码为字节流,使用decode()方法将字节流解码为字符串。

a = "hello"
b = a.encode('utf-8')  # 编码为字节流
print(b)  # b'hello'
c = b.decode('utf-8')  # 解码回字符串
print(c)  # hello

2. 集合概念

2.1 集合的创建

集合(Set)是一种无序、不重复的元素集合。在Python中,集合是可变的数据类型,集合的元素必须是不可变类型(如数字、字符串、元组等)。集合不支持索引、切片和其他序列类的操作。

集合可以通过花括号 {} 或者 set() 函数来创建。

# 使用花括号创建集合
a = {
    
    1, 2, 3, 4, 5}
print(type(a))  # <class 'set'>

# 使用 set() 函数创建集合
b = set([1, 2, 3, 4, 5])
print(type(b))  # <class 'set'>

2.2 集合的基本操作

2.2.1 添加元素

使用 add() 方法向集合中添加元素。如果元素已经存在,集合不会添加重复的元素。

a = {
    
    1, 2, 3}
a.add(4)
a.add(2)  # 不会重复添加2
print(a)  # {1, 2, 3, 4}

2.2.2 删除元素

可以使用 remove()discard() 方法删除集合中的元素。remove() 在元素不存在时会抛出异常,而 discard() 如果元素不存在则不会做任何操作。

a = {
    
    1, 2, 3, 4}
a.remove(3)  # 删除元素3
# a.remove(5)  # 如果元素5不存在会抛出 KeyError 异常
a.discard(5)  # 不会抛出异常
print(a)  # {1, 2, 4}

2.2.3 集合的运算

集合支持一些常见的数学运算,比如并集、交集、差集等。

  • |:并集
  • &:交集
  • -:差集
  • ^:对称差集(即两个集合中不重复的元素)
a = {
    
    1, 2, 3}
b = {
    
    3, 4, 5}

print(a | b)  # 并集 {1, 2, 3, 4, 5}
print(a & b)  # 交集 {3}
print(a - b)  # 差集 {1, 2}
print(a ^ b)  # 对称差集 {1, 2, 4, 5}

2.2.4 集合的遍历

可以使用 for 循环遍历集合中的元素。

a = {
    
    1, 2, 3, 4}
for elem in a:
    print(elem)

2.3 集合的判断

  • in:判断一个元素是否存在于集合中。
  • not in:判断一个元素是否不在集合中。
a = {
    
    1, 2, 3, 4}
print(2 in a)  # True
print(5 not in a)  # True

2.4 集合的清空和复制

  • 使用 clear() 方法清空集合。
  • 使用 copy() 方法复制集合。
a = {
    
    1, 2, 3}
b = a.copy()  # 复制集合
a.clear()  # 清空集合
print(a)  # set()
print(b)  # {1, 2, 3}

2.5 集合的特点

  • 无序性:集合中的元素没有顺序。
  • 唯一性:集合中的元素是唯一的,不能重复。
a = {
    
    1, 2, 3, 3, 4}
print(a)  # {1, 2, 3, 4},自动去重

集合是非常适合用于去重和进行集合运算的工具,可以高效地进行元素的查找、插入、删除等操作。