字符串是 Python 中常用的数据类型。
在本节课程中,我们将学习 字符串及字符串的相关操作 的相关知识!
字符串
字符串生成
Python中可以使用单引号’'或者双引号""生成字符串。
a = "hello, world"
b = 'hello world'
print ('a = ', a)
print ('b = ', b)
hello, world
hello, world
简单操作
a = 'hello ' + 'world' # 加法
b = "echo" * 3 # 乘法
print(a)
print(b)
print(len(a))
print(len(b))
hello world
echoechoecho
11
12
字符串方法
Python是一种面向对象的语言,面向对象的语言中一个必不可少的元素就是方法,而字符串是对象的一种,所以有很多可用方法。
跟很多语言一样,Python使用以下形式来调用方法:
对象.方法(参数)
分割
split()将字符串按照空格(包括多个空格,制表符\t,换行符\n等)分割,并返回所有分割得到的字符串。
a = "1 2 3 4 5"
b = "1|2|3|4|5"
print (a.split())
print (b.split('|'))
['1', '2', '3', '4', '5']
['1', '2', '3', '4', '5']
连接
与分割相反,s.join(str_sequence)的作用是以s为连接符将字符串序列str_sequence中的元素连接起来,并返回连接后得到的新字符串:
a = ['1', '2', '3', '4', '5']
print (''.join(a)) #直接连接
print (' '.join(a)) #用空格连接
print ('|'.join(a)) #用|连接
12345
1 2 3 4 5
1|2|3|4|5
替换
s.replace(part1, part2)将字符串s中指定的部分part1替换成想要的部分part2,并返回新的字符串。
a = "hello world"
b = a.replace('world', 'python')
print(a) #没有改变
print(b) #变成了新的替换内容
hello world
hello python
大小写转换
s.upper()方法返回一个将s中的字母全部大写的新字符串。
s.lower()方法返回一个将s中的字母全部小写的新字符串。
这两种方法也不会改变原来s的值。
a = "HELLO world"
b = a.upper()
c = a.lower()
print(a) #没有改变
print(b) #变成了新的替换内容
print(c) #变成了新的替换内容
HELLO world
HELLO WORLD
hello world
去除多余空格
s.strip()返回一个将s两端的多余空格除去的新字符串。
s.lstrip()返回一个将s开头的多余空格除去的新字符串。
s.rstrip()返回一个将s结尾的多余空格除去的新字符串。
s的值依然不会变化。
a = " hello world "
b = a.strip()
c = a.lstrip()
d = a.rstrip()
print(a, len(a)) #没有改变, 加了字符串长度容易比较长度
print(b, len(b)) #去除了所有空格
print(c, len(c)) #去除了左边空格
print(d, len(d)) #去除了右边空格
还有更多方法就不一一举例了
多行字符串
Python 用一对 “”" 或者 ‘’’ 来生成多行字符串:
a = """hello world.
it is a nice day."""
print (a)
hello world.
it is a nice day.
在储存时,我们在两行字符间加上一个换行符 ‘\n’
使用 () 或者 \ 来换行
当代码太长或者为了美观起见时,我们可以使用两种方法来将一行代码转为多行代码:
- ()
- \
a = ("hello, world. "
"it's a nice day. "
"my name is xxx")
b = "hello, world. " \
"it's a nice day. " \
"my name is xxx"
hello, world. it's a nice day. my name is xxx
hello, world. it's a nice day. my name is xxx
强制转换为字符串
在Python中,str()和repr()都用于将对象转换为字符串,但它们之间有一些关键区别:
目的:
str(): 生成一个对象的可读性好的字符串表示,适合于最终用户输出。
repr(): 生成一个对象的官方字符串表示,其目的是尽可能明确地表达对象。repr()的结果通常可以被eval()函数使用来重新创建该对象。
字符串表示:
使用str()时,对于一些对象,其生成的字符串更加易于阅读。
使用repr()时,对于同一对象,其生成的字符串通常包含更多的信息,有时甚至是该对象的有效Python表达式。
a = str(1.1 + 2.2)
b = repr(1.1 + 2.2)
print(a)
print(b)
3.3000000000000003
3.3000000000000003
a将1.1 + 2.2的结果转换为一个对最终用户友好的字符串形式,即’3.3’(尽管由于浮点数的精度问题,实际结果可能并不是精确的3.3)。
b将1.1 + 2.2的结果转换为一个更加准确、官方的字符串表示,即’3.3000000000000003’(这里显示了浮点数精度问题的直接结果,这是因为repr()旨在提供更多的细节,包括浮点数的精度问题)。
总的来说,str()和repr()的主要区别在于它们的目的和生成的字符串的详细程度。str()更注重于生成可读性好的字符串,而repr()则尽可能地提供详细的表示,有时甚至可以用来重新创建对象。
整数与不同进制的字符串的转化
在Python中,整数可以转换为不同进制的字符串表示,包括二进制、八进制、十进制和十六进制。以下是如何进行这些转换的示例:
整数转换为二进制字符串:使用bin()函数。
整数转换为八进制字符串:使用oct()函数。
整数转换为十六进制字符串:使用hex()函数。
同时,如果你想从这些不同进制的字符串表示转换回整数,可以使用int()函数,并指定相应的进制。
# 整数
number = 42
# 整数转换为二进制字符串
binary_string = bin(number)
print(f"二进制: {binary_string}") # 输出: 0b101010
# 整数转换为八进制字符串
octal_string = oct(number)
print(f"八进制: {octal_string}") # 输出: 0o52
# 整数转换为十六进制字符串
hex_string = hex(number)
print(f"十六进制: {hex_string}") # 输出: 0x2a
# 从不同进制的字符串转换回整数
binary_to_int = int(binary_string, 2)
octal_to_int = int(octal_string, 8)
hex_to_int = int(hex_string, 16)
print(f"二进制转整数: {binary_to_int}") # 输出: 42
print(f"八进制转整数: {octal_to_int}") # 输出: 42
print(f"十六进制转整数: {hex_to_int}") # 输出: 42
在Python中,int()和float()函数可以用来将字符串转换为整数和浮点数。这在处理从文本文件、用户输入或网络请求中获取的数据时非常有用,因为这些数据通常以字符串形式出现。
使用int()将字符串转换为整数
当你有一个表示整数的字符串时,可以使用int()函数将其转换为整数。如果字符串不是有效的整数表示,将会抛出ValueError。
# 字符串转整数
str_number = "123"
int_number = int(str_number)
print(int_number) # 输出: 123
# 十六进制字符串转整数
hex_str = "1a"
int_from_hex = int(hex_str, 16)
print(int_from_hex) # 输出: 26
使用float()将字符串转换为浮点数
类似地,float()函数可以将表示浮点数的字符串转换为浮点数。如果字符串不是有效的浮点数表示,也会抛出ValueError。
# 字符串转浮点数
str_float = "123.456"
float_number = float(str_float)
print(float_number) # 输出: 123.456
注意事项
在使用int()和float()进行转换时,字符串必须是有效的数值表示。例如,字符串"123abc"不能转换为整数或浮点数。
int()函数还可以接受一个可选的基数参数,用于将不同进制的数转换为整数。默认基数是10,但你可以指定其他值,如16(十六进制)、8(八进制)等。
这些转换功能在数据处理和转换时非常有用,特别是在需要将文本数据转换为数值类型以进行计算或存储的情况下。
格式化字符串
Python的format()方法提供了一种灵活的方式来构建字符串。它允许你插入变量的值,甚至可以对这些值进行格式化。这种方法比旧式的百分号%格式化要更加强大和灵活。
基本用法
这里,{0}和{1}是占位符,分别由format()方法中的第一个和第二个参数替换。
name = "Alice"
age = 30
greeting = "Hello, {0}. You are {1} years old.".format(name, age)
print(greeting)
Hello, Alice. You are 30 years old.
使用关键字参数
greeting = "Hello, {name}. You are {age} years old.".format(name="Bob", age=25)
print(greeting)
Hello, Bob. You are 25 years old.
在这个例子中,我们使用了关键字参数来指定要插入的值,这使得字符串更易于阅读和维护。
格式化数字
pi = 3.1415926
formatted_pi = "The value of pi is approximately {0:.2f}".format(pi)
print(formatted_pi)
The value of pi is approximately 3.14
这里,:.2f指定了浮点数的格式化方式:保留两位小数。
使用字典进行格式化
person = {'name': 'Alice', 'age': 30}
greeting = "Hello, {name}. You are {age} years old.".format(**person)
print(greeting)
Hello, Alice. You are 30 years old.
通过在字典前加**,可以将字典的键-值对作为关键字参数传递给format()方法。
使用类的属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
bob = Person("Bob", 25)
greeting = "Hello, {0.name}. You are {0.age} years old.".format(bob)
print(greeting)
Hello, Bob. You are 25 years old.
在这个例子中,{0.name}和{0.age}分别引用了bob对象的name和age属性。
format()方法的这些用法展示了其在字符串格式化方面的强大能力,使得代码更加清晰、灵活。
索引和分片
在Python中,索引和分片(slicing)是处理序列类型数据(如字符串、列表、元组等)的强大工具。它们允许你访问序列中的元素或子序列。
索引
# 字符串索引
s = "Hello, world!"
print(s[0]) # 输出: H
print(s[-1]) # 输出: !
# 列表索引
numbers = [10, 20, 30, 40, 50]
print(numbers[2]) # 输出: 30
print(numbers[-2]) # 输出: 40
索引用于访问序列中的单个元素。Python的索引从0开始。
分片
分片用于获取序列的一部分,语法为[start🔚step],其中start是起始索引(包含),end是结束索引(不包含),step是步长。
# 字符串分片
s = "Hello, world!"
print(s[0:5]) # 输出: Hello
print(s[7:]) # 输出: world!
print(s[:5]) # 输出: Hello
print(s[::2]) # 输出: Hlo ol!
# 列表分片
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4]) # 输出: [20, 30, 40]
print(numbers[:3]) # 输出: [10, 20, 30]
print(numbers[::2]) # 输出: [10, 30, 50]
负索引和负步长
Python支持负索引(从序列的末尾开始计数)和负步长(反向遍历序列)。
# 使用负索引
s = "Hello, world!"
print(s[-5:-2]) # 输出: wor
# 使用负步长
numbers = [10, 20, 30, 40, 50]
print(numbers[::-1]) # 输出: [50, 40, 30, 20, 10]
通过索引和分片,你可以灵活地访问和操作Python中的序列数据。
最后
欢迎关注我的微信公众号, 一起交流学习!!!