1. 访问字符串中的值
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
字符串使用单引号或者双引号引起来
字符串截取语法:可以正向索引0开始与反向索引-1倒数
变量[头下标:尾下标:步长];默认步长为1
str = 'hello world!'
test1 = str[0:5] #hello
test2 = str[-6:-1] #world
test3 = str[0:5:2] #hlo
test4 = str[-2:-7:-1] #dlrow
print(str[0]) #h
print(test1, test2)
print(test3, test4)
2. 转义符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符
- 续行符(\)
print("hello \
world \
!")
- 打印出特殊符号:反斜杠、单引号与双引号
print('\\')#\
print('\'')#'
print('\"')#"
- 常用
\n (换行)\b(退格)\v(纵向制表符)\t(横向制表符)\a(响铃,执行后电脑会有响声)
print('hello\nworld')
print('hello \b world')#把前面空格移走了
print('hello \v world')
print('hello \t world')
- 其它
\000(空)\f(换页)\yyy(八进制数,y 代表 0~7 的字符)
\xyy(十六进制数,以 \x 开头,y 代表的字符)
\r(将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。)
print("aa\000bb")
print('hello\fworld')
print("hello\rworld!!!")
print("how are you\rgood")
print("\110\145\154\154\157\40\127\157\162\154\144\41")
print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21")
使用\r实现百分比进度
import time
for i in range(101):
print("\r{:3}%".format(i),end=' ')
time.sleep(0.3)
3. 字符串格式化
格式化符号:
- 字母类型
%c【格式化字符及其ASCII码】%s【格式化字符串】
ch = '嗯'
name='xiaoming'
print('my name is %s'%name)
print('我是%s,%c'%(name,ch))
- 数据类型
%d【格式化整数】%u【格式化无符号整型】%f【格式化浮点数字】%e【科学计数法格式化浮点数】%E【与%e同理】%g【%f和%e的简写】%G【%f和%E的简写】
- 进制数
%o【格式化无符号八进制数】%x【格式化无符号十六进制数】%X【格式化无符号十六进制数(大写)】%p【用十六进制数格式化变量的地址】
4. f-string
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
#之前
name = 'lysa'
age = 18
print('my name is %s, age:%d'%(name, age))
#f-string
print(f'my name is {name}, age:{age}')
5. format
python2.6开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
str1 = 'hello'
str2 = 'world'
print('{} {}'.format(str1, str2))
print('{1} {0}'.format(str1, str2))
print('{str2},{str1}'.format(str1='aa',str2='bb'))
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
数字格式化
num1 = 3.1415926
#保留小数点后两位
print("{:.2f}".format(num1))
#带符号保留小数点后两位
print("{:+.2f}".format(num1))
num2 = 10
#左对齐
print("{:*<4d}".format(num2))
#右对齐
print("{:->4d}".format(num2))
#居中对其
print("{:#^4d}".format(num2))
num3 = 10000000
#逗号分割数据形式
print("{:,}".format(num3))
num4 = 0.1
#百分比格式
print("{:.3%}".format(num4))
#指数计法
print("{:.2e}".format(num3))
进制数
print('{:b}'.format(11))
print('{:d}'.format(11))
print('{:o}'.format(11))
print('{:x}'.format(11))
print('{:#x}'.format(11))
print('{:#X}'.format(11))
6. python的字符串内置函数
-
糅杂类型
count(str, beg=0, end=len(string)):返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
len(str):返回字符串长度
max(str):返回字符串 str 中最大的字母
min(str):返回字符串 str 中最小的字母
join(seq):以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
replace(old, new, [, max]):把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。
splite(str='', num=string.count(str)):以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
str1 = 'a'
str2 = 'abcabcagaa'
num1 = str2.count(str1)
num2 = str2.count(str1,0,len(str2))
num3 = str2.count(str1, 0, len(str2)-1)
num4 = len(str2)
_max = max(str2)
_min = min(str2)
print(num1, num2, num3, num4) #5 5 4 10
print(_max, _min) #g a
str1 = '--'
seq = ['g', 'o', 'o', 'g', 'l', 'e']
test1 = str1.join(seq)
str2 = 'hello hello hello hello hello'
old = 'llo'
new = 'e'
test2 = str2.replace(old, new, 3)
print(test1)
print(test2)
str = "this is string example....wow!!!"
print (str.split()) # 默认以空格为分隔符
print (str.split('i',1)) # 以 i 为分隔符
print (str.split('w')) # 以 w 为分隔符
-
判断类型
isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
isalpha():如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
isdigit():如果字符串只包含数字则返回 True 否则返回 False
isnumeric():如果字符串中只包含数字字符,则返回 True,否则返回 False
istitle():如果字符串是标题化的(见 title())则返回 True,否则返回 False
isdecimal():检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。
islower()、isupper()、isspace()【如果字符串中只包含空白,则返回 True,否则返回 False】
alnum = 'aa123'
alpha = 'num'
num = '18'
a = alnum.isalnum()
print(a, alnum.isalnum(), alpha.isalpha(), num.isdigit(),num.isnumeric())
l = 'aaaa'
u = 'AAAA'
lu = 'AAaa'
print(l.islower(),u.isupper(), lu.islower(), lu.isupper())
-
查找类型
find(str, beg=0, end=len(string)):检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
index(str, beg=0, end=len(string)):跟find()方法一样,只不过如果str不在字符串中会报一个异常。
rfind(str, beg=0, end=len(string)):类似于 find()函数,不过是从右边开始查找
rindex(str, beg=0, end=len(string)):类似于 index()函数,不过是从右边开始查找
str1 = 'hello world hello world'
str2 = 'hello'
str3 = 'l'
str4 = 'a'
test1 = str1.find(str2)
test2 = str1.find(str3)
test3 = str1.find(str4)
test4 = str1.find(str3,10)
test5 = str1.rfind(str3)
test6 = str1.rfind(str3,14,17)
print(test1, test2, test3, test4)# 0 2 -1 14
print(test5, test6) #21 15
-
转化类型
capitalize():将字符串的第一个字符转为大写
upper()【转为大写字母】lower()【转为小写】
swapcase():大小写交换转化
title():首字母大写,其余小写
str1 = 'abcd'
str2 = 'hello world'
str3 = 'HeLLo worLD'
test1 = str1.capitalize() #Abcd
test2 = str3.upper() #HELLO WORLD
test3 = str3.lower() #hello world
test4 = str3.swapcase() #hEllO WORld
test5 = str2.title() #Hello World
test6 = str3.title() #Hello World
print('test1=',test1, 'test2=',test2, 'test3=',test3)
print('test4=',test4, 'test5=',test5, 'test6=',test6)
-
增删类型
center(width, fillchar):返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
ljust(width,[fillchar]):返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格
rjust(width, [fillchar]):返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
zfill(width):返回长度为 width 的字符串,原字符串右对齐,前面填充0
strip([char]):在字符串上执行 lstrip()和 rstrip()
lstrip([char]):截掉字符串左边的空格或指定字符。
rstrip([char]):截掉字符串右边的空格或指定字符。
str1 = 'hello'
test1 = str1.center(20, '*')
test2 = str1.zfill(20)
print(test1)
print(test2)
print(str1.ljust(20,'-'))
print(str1.rjust(20))
str2 = ' -hello- **'
print(str2.lstrip())
print(str2.rstrip('*'))