Python

Python数据类型_字符串类型

2020-07-24  本文已影响0人  xilifeng

字符串类型的常用操作

按索引取值(正向取+反向取):只能取

msg = "hello world"
print(msg[0])
print(msg[-1])

长度len

msg = "hello\n"
print(len(msg))

成员运算 in 和 not in

msg = "hello world"
print("ello" in msg)
print("lo w" not in msg)

不是所有的功能运行完毕都有返回值, 可以用打印返回为None确认

res = print("hello world")
print(res)

切片(顾头不顾尾,步长): 其实是赋值一段字符串为新值,不是取走

msg = "hello world"
res = msg[1:5:1]  # [头:尾:步长]===> 1 2 3 4, 和range(1, 5, 1)用法相似
res1 = msg[:]  # 从头取到尾, 复制整个字符串, 但id不变, 等于 res1 = msg
res2 = msg[1:]  # 取到末尾, 默认步长为1
res3 = msg[:5]  # 从头取, 默认步长为1
res4 = msg[-1:-3:-1]  # 倒着取-1 -2, 步长实为取值方向
res5 = msg[::-1]  # 倒着从尾取到头, 等于[-1::-1]

内置方法: split 和 rsplit 按指定的符号切分字符串

msg = "test:30:20"  # split按符号切分,和按索引位置msg[1:5:1]切片不同,无须知道切的字符个数
res = msg.split(":", 1)  # split("指定符号", 从左到右切分的次数, 不加则全切)
r_res = msg.rsplit(":", 1)  # rsplit("指定符号", 从右到左切分的次数, 不加则全切),因为没步长的概念

内置方法: join

msg = ["test", "30", "20"]  # 列表中都是字符串,不是整型
res = ":".join(msg)  # 列表中只能是同种类型才能join, 否则报错
print(type(res))  # <class 'str'>

内置方法: strip 模糊匹配并去除字符串左右两边的空白或符号或转义符

msg = "    \n     hello world    \n    "
res = msg.strip()
msg = "!@#$%^() hello ^_^ world ()^%$"
res = msg.strip("()!@#$%^_&*")  # strip("")括号中的引号不能省,引号中的指定符号为模糊匹配字符串两边

内置方法: lstrip 去除字符串左边的符号 和 rstrip 去除字符串右边的符号

msg = "@!#$% hello &^% world &*(^#"
l_res = msg.lstrip("!@#$%^&*()")  # strip没有计数或步长的功能,以此为扩展
r_res = msg.rstrip("!@#$%^&*()")

内置方法: replace 精确匹配并去除字符串任意位置的符号

msg = "^@_@^ hello @^_^@ world @^_^@"
res = msg.replace("@^_^@", "", 1)  # replace("须替换源", "替换目标,引号中空为去除", 从左到右替换几次), replace不是改原值,是产生新值

内置方法: lower 字符串小写 和 upper 字符串大写

msg = "AAbb!@#$%^&CCdd"
l_msg = msg.lower()  # lower()中标self, 括号中什么都不写
u_msg = msg.upper()  # 字符串是不可变类型, 所以都是产生新值, 不改原值

内置方法: startswith 和 endswith 判断是否以指定字符开头或结尾

msg = "hello"
print(msg.startswith("he"))  # 用来条件判断
print(msg.endswith("lo"))

内置方法: isdigit 判断str内, 或bytes中是否为纯整数, 识别范围isnumeric >isdigit >isdecimal

num1 = b"18"  # bytes
num2 = u"18"  # unicode,Python3中默认,无需加u就是unicode
print(num1.isdigit())  # 条件判断,只有整型才为True, 加空格,浮点型都为假
print(num2.isdigit())
age = input("Pls input your age: ").strip()  # 适用示例
if age.isdigit():
    age = int(age)
    if age == 18:
        print("Bingo")
    else:
        print("Guess Wrong")
else:
    print("It must be digit.")

内置方法: isnumeric 判断str内阿拉伯整数,中文数字,罗马数字

num2 = u"18"
num3 = "四"  # 中文数字
num4 = "Ⅳ"  # 罗马数字
print(num2.isnumeric())  # 和isdigit用法类似
print(num2.isdecimal())  # isdecimal只能判断str内的阿拉伯整数,其他都不行,识别范围最小,最精准
print(num3.isnumeric())  # isdigit不能识别中文数字
print(num4.isnumeric())  # isdigit不能识别罗马数字

内置方法: is其他 其他判断

print("felix123".isalnum())  # 字符串由字母或数字组成
print("felix".isalpha())  # 字符串只能由字母组成
print("felix123".islower())  # 字母是否都为小写, 数字不管
print("FELIX123".isupper())  # 字母是否都为大写, 数字不管
print("  ".isspace())  # 是否为空格
print("My Name Is Felix".istitle())  # 只能首字母大写

内置方法: find, rfind, index, rindex 查找 和 count 统计

msg = "hello world"
res = msg.find("wo", 0, 3)  # find("查找目标", 起始范围, 结束范围)顾头不顾尾,从左往右找子字符串在字符串中出现的第一个位置
r_res = msg.rfind("wo")  # 从右往左找在字符串中的第一个位置,位置计数仍从左往右算
print(res)  # 找不到不报错,结果显示为-1
i_res = msg.index("woo")  # 和find用法一样,但是找不到会报错
c_res = msg.count("wo", 1, 9)  # count("统计目标", 起始位置, 结束范围)顾头不顾尾,从左往右统计子字符串在字符串中出现的次数

内置方法: center, ljust, rjust, zfill 控制打印位置

name = "felix"
print(name.center(20, "*"))  # center(打印宽度, "填充符号"))居中显示
print(name.ljust(20, "*"))  # ljust(打印宽度, "填充符号")靠左显示
print(name.rjust(20, "*"))  # rjust(打印宽度, "填充符号")靠右显示
print(name.zfill(20))  # zfill(打印宽度), 长度不够置0, 靠右对齐

内置方法: expandtabs控制制表符的空格个数

print("hello\tworld".expandtabs(1))  # 默认制表符为4个空格,现改为1个

内置方法: capitalize, swapcase, title

msg = "hello world"
print(msg.capitalize())  # 句首大写
print(msg.title())  # 每个单词的首字母大写
msg_2 = "AbCdE"
print(msg_2.swapcase())  # 两极反转,大写变小写,小写变大写

格式化字符串的三种方法

最老的方式一: %号

x = "felix"
y = "18"
msg = "My name is %s and my age is %s" % (x, y)
print(msg)

方式二: str.format 运行效率居中,Python2通用,推荐

x = "felix"
y = "18"
msg_1 = "My name is {} and my age is {}".format(x, y)
msg_2 = "My name is {0} and my age is {1} and {1}{0}{1}".format(x, y)  # 类似列表取值
print(msg_1, msg_2)
msg = "My name is {name} and my age is {age}".format(age=18, name="felix")  # name和age都是变量名
print(msg)

3.5解释器最新引入的方式三: f-Strings 速度最快,Python2不能用

x = "felix"
y = "18"
msg = f"My name is {x} and my age is {y}"
print(msg)

方式四: 标准库模板

上一篇 下一篇

猜你喜欢

热点阅读