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)