欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基础知识(python内置数据类型-字符串)

程序员文章站 2022-05-13 12:49:15
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"

字符串的创建

  1. 用单/双引号创建字符串
  2. 空字符串和 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() 函数可以将其他类型转换为字符串类型。

  1. 数字类型转换为字符串:
a = str(5.21)
print(type(a))  # <class 'str'>
  1. Bool型转换为字符串:
a = str(True)

使用 [] 提取字符

字符串的本质是字符序列,可以通过在字符串后面添加 [] ,在 [] 里指定偏移量,可以提取该位置的单个字符。

  1. 正向搜索:最左侧第一个字符,偏移量是0;
  2. 反向搜索:最右侧一个字符,偏移量是-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

字符串比较和同一性

  1. =和!=比较的是字符串的内容;
  2. 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

填充与对齐

填充与对齐常常一起使用。

  1. ^、<、>分别是居中、左对齐、右对齐,后面带宽度;
  2. :后面带填充的字符,只能是一个字符,不指定的话默认用空格填充
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