当前位置: 移动技术网 > IT编程>脚本编程>Python > python基础知识(python内置数据类型-字符串)

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

2020年07月22日  | 移动技术网IT编程  | 我要评论
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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网