python基础知识(python内置数据类型-字符串)
python中的字符串
字符串基本特点
字符串的本质是字符序列。python中的字符串是不可变的,无法对原字符串做任何修改(不能用下标赋值的方式去改变字符串)。但是可以将字符串的一部分赋值创建新的字符串,达到“看起来修改”的效果。
a = "4541"
a[1] = "8"
# 程序报错:TypeError: 'str' object does not support item assignment
注:python不支持单字符类型,单字符也是作为一个字符串使用的。
字符串的编码
python3支持Unicode,Unicode可以表示世界上任何书面语言的字符。python3的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集。
注:1. ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。占用0 - 127用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
2. Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
3. 使用内置函数 ord() 可以把字符转换成对应的Unicode码;
4. 使用内置函数 chr() 可以把十进制数字转换成对应的字符。
ord("A") # 65
chr(66) # “B"
字符串的创建
- 用单/双引号创建字符串
- 空字符串和 len() 函数
python允许空字符串的存在,不包含任何字符且长度为0;
len() 函数用来计算字符串含有多少个字符(空格、\n、\t 也算一个字符)
c = ""
len(c) # 0
转义字符
转义字符 | 描述 |
---|---|
\ | 续行符 |
\\ | 反斜杠符号 |
\‘ | 单引号 |
\" | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
字符串常见操作
字符串拼接
可以使用 “+” 将多个字符串拼接起来。
注:
对于 “+” 运算符:
(1)+ 两边都是字符串,则字符串拼接;
(2)+ 两边都是数字,则进行加法运算;
(3)+ 两边类型不同,则抛出异常。
a = "a"
print(id(a)) # 2008317966448
a = a + "b"
print(id(a)) # 2008318085168
字符串复制
使用 "*"可以实现字符串复制,如
a = "hello" * 3
print(a) # hellohellohello
不换行打印
调用 print() 时,会自动打印一个换行符。当我们不想换行时,可以通过参数 end = "任意字符串”,实现末尾添加任何内容:
print("hello", end = " ") # 空格
print("hello", end = "#") # hello hello#
从控制台读取字符串
使用 input() 从控制台读取键盘输入的内容,返回字符串类型:
user_name = input("请输入用户名:")
# 从键盘输入的字符串返回给 user_name
其他类型数据转换成字符串
使用 str() 函数可以将其他类型转换为字符串类型。
- 数字类型转换为字符串:
a = str(5.21)
print(type(a)) # <class 'str'>
- Bool型转换为字符串:
a = str(True)
使用 [] 提取字符
字符串的本质是字符序列,可以通过在字符串后面添加 [] ,在 [] 里指定偏移量,可以提取该位置的单个字符。
- 正向搜索:最左侧第一个字符,偏移量是0;
- 反向搜索:最右侧一个字符,偏移量是-1。
a = "hello"
print(a[1]) # e
print(a[-2]) # l
replace() 替换字符串
字符串不可改变,不可通过下标赋值的方式去改变字符串,但是,有时确实需要替换某些字符,这时,只能通过用 replace() 创建新的字符串去实现。
a = "hello"
a.replace("e", "h") # hhllo
a.replace("l", "y") # hhyyo
注意:整个过程中,实际上是创建了新的字符串变量,并指向了变量a,而不是修改了以前的字符串(可用 id() 函数来验证)。、
字符串切片
切片操作可以快速的提取子字符串,标准格式为:
[起始偏移量start:终止偏移量end:步长step]
注:包头不包尾
操作 | 说明 |
---|---|
[:] | 提取全部字符串 |
[start:] | 从start到结尾 |
[:end] | 从0开始,到 end-1 |
[start:end] | 从 start 到 end-1(包头不包尾) |
[-3:] | 倒数三个 |
[-8 : -3] | 倒数第八个到倒数第四个(包头不包尾) |
[::-1] | 步长为负,从右向左反向提取 |
注意:切片操作时,起始偏移量不在[0,字符串长度-1]这个范围内也不会报错。起始偏移量小于0会被当做0,终止偏移量大于长度-1,会被当做长度-1.
split() 分割和 join() 合并
split() 可以基于指定分割符将字符串分隔成多个字符串(存储到列表中),如果不指定分隔符,则默认使用空白字符(换行/空格/制表符)。
a = "to be or not to be"
print(a.split()) # ['to', 'be', 'or', 'not', 'to', 'be']
print(a.split("be")) # ['to ', ' or not to ', '']
join() 的作用与 split() 作用刚好相反,用于(用指定的字符)将一系列列表中子字符串连接起来。
a = ["to","be","or","not","to","be"]
print("*".join(a)) # to*be*or*not*to*be
拼接字符串要点:使用+拼接字符串,会生成新的字符串对象,因此不推荐;而使用join函数,会在拼接字符串之前计算所有字符串长度,然后逐一拷贝,仅新建一次对象。(在循环结构中循环拼接字符串 join() 占优势,因为列表可变,字符串不可变)
字符串驻留机制和字符串比较
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下滑下面、字母和数字)会启用字符串驻留机制。(即相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量)
a = "abc_11"
b = "abc_11"
print(a is b) # True
c = "aa#"
d = "aa#"
print(c is d) # 命令行执行结果为False,pycharm执行结果为True
字符串比较和同一性:
- =和!=比较的是字符串的内容;
- is/is not 判断两个对象是否引用同一个对象(比较的是地址)
成员操作符
in / not in 关键字,判断某个字符(子字符串)是否存在于字符串中。
字符串常用查找方法
方法 | 说明 |
---|---|
len(a) | 字符串长度 |
a.startswith(“hello”) | 以指定字符串开头(返回布尔型) |
a.endswith(“world”) | 以指定字符串结尾(返回布尔型) |
a.find("我“) | 第一次出现指定字符串的位置 |
a.rfind("我”) | 最后一次出现指定字符串的位置 |
a.count("我“) | 指定字符串出现了几次 |
a.isalnum() | 所有字符全是字母或数字 |
去除首尾信息
可以通过 strip() 去除字符串首尾指定信息,通过 lstrip() 去除字符串左边指定信息,通过 rstrip() 去除字符串右边指定信息。
”*s*i*x*".strip("*") # s*i*x
大小写转换
a = "i love you"
示例 | 说明 |
---|---|
a.capitalize() | 产生新的字符串,首字母大写 |
a.title() | 产生新的字符串,每个单词都首字母大写 |
a.upper() | 产生新的字符串,所有字符全转成大写 |
a.lower() | 产生新的字符串,所有字符全转成小写 |
a.swapcase() | 产生新的字符串,所有字母大小写互换 |
格式排版
center() 、ljust()、rjust() 这三个函数用于对字符串实现排版:
a = "six"
a = a.center(10,"*")
print(a) # ***six****
其他方法
isalnum() : 是否为字母或数字
isalpha() : 是否只由字母组成(含汉字)
isdigit() : 是否只由数字组成
isspace() : 是否为空白符(空格、\n等)
isupper(): 是否为大写字母
islower(): 是否为小写字母
字符串的格式化
用 str.format() 函数可以实现字符串的格式化。基本语法是通过 {} 和 : 来代替以前的 %。
format() 函数可以接受的参数个数不限,位置也可不按顺序:
a = "名字是:{0},年龄是{1}"
print(a.format("小明", 11)) # 名字是:小明,年龄是11
b = "名字是{0},年龄是{1},{0}学习不错”
print(b.format("小明”,11)) # 名字是小明,年龄是11,小明学习不错
c = "名字是{name},年龄是{age}"
print(c.format(age = 11, name = "小明")) # 名字是小明,年龄是11
填充与对齐
填充与对齐常常一起使用。
- ^、<、>分别是居中、左对齐、右对齐,后面带宽度;
- :后面带填充的字符,只能是一个字符,不指定的话默认用空格填充
print("我是{0},有{1:*^8}万存款".format("xiaoming","666"))
# 我是xiaoming,有**666***万存款
数字格式化
浮点数通过f,整数通过d进行需要的格式化:
a = "我是{0},我的存款有{1:.2f}"
print(a.format("xiaoming", 4512.45896))
# 我是xiaoming,我的存款有4512.46
格式 | 描述 |
---|---|
{:.2f} | 保留小数点后两位(四舍五入) |
{:.0f} | 不带小数 |
{:.2%} | 百分比格式(保留两位小数) |
可变字符串
python中字符串属于不可变对象,不支持原地修改,若要修改其中的值,只能创建新的字符串对象。但确实需要原地修改字符串时,可以使用io.StringIO() 对象(生成一个新的可修改的字符串对象)或者 array 模块。
import io
s = "hello"
sio = io.StringIO(s)
print(type(sio)) # <class '_io.StringIO'>
print(sio.getvalue()) # hello
sio.seek(2) # 移动到此处
sio.write("k")
print(sio.getvalue()) # heklo
本文地址:https://blog.csdn.net/weixin_43543210/article/details/107477121