字符串
1.字符串的定义
-单引号定义:'123'
-双引号定义:"456987"
什么时候使用双引号,什么时候使用单引号?
一般是使用双引号
如果字符串内容包含双引号这时就需要使用单引号了
解决字符串中含引号的问题:
"123456'7'"
可以使用索引访问字符串中的元素 e.g : a = ‘123456’ ,a[0] == ‘1’. 如何用for 循环遍历一个字符串?
符串内容不可更改
for i in range(len(a)):
print(a[i],end='') # end = '符号' 表示输出以该字符结尾,默认是换行
2.转义字符
三个引号建立的字符串会自动完成转义 a = ‘’‘i’m a good person’’’
\\ 输出反斜杠
\"输出双引号
在字符串前加 r r"字符串" ,去掉字符串的特殊性 ,在需要输出原始数据的时候可用
e,g:
'aaaa\nbbbb'
print('aaaa\nbbbb')
得到的是
`aaaa
`bbbb
print(r'aaaa\nbbbb')
得到的是
aaaa\nbbbb
3.格式化输出
简单的格式化输出
name = 'xx'
print('大家好,我叫%s'%name)
age = 18
print("大家好,我叫%s, 今年%d岁了!"%(name,age))
符号 | 含义 |
---|---|
%c | 字符 |
%s | 通过str()字符串转换来格式化 * |
%i | 有符号十进制整数 |
%d | 有符号十进制整数 * |
%o | 八进制整数 |
%x | 十六进制整数(小写字母) |
%X | 十六进制整数(大写字母) |
%e | 索引符号(小写"e") |
%E | 索引符号(大写"E") |
%f | 浮点实数 * |
%g | %f和%e的简写 |
%G | %f和%E的简写 |
4.输入
字符串可以拼接使用 s = '123' + '456';
得到:s = '123456';
py3 中 input() 输入的是字符串
py2 相对智能
5.字符串的切片
切的范围:
[参数1(开始索引):参数2(结束索引): 参数3(步长)] ,切的范围是[参数1~参数2)每次选空为格参数3的数
因为字符串是不可变类型所以不需要考虑深拷贝和浅拷贝的关系
e.g: [:] 得到一个复制
a = "123456"
b = a[:] # 此时b和a 的内容相同
e.g: [1:] 从索引到字符串最后
b = a[1:]# b = "23456"
参数可以是负数:负的表示从后往前遍历
所以:e.g: [-1::-1] 得到的是逆序, [::-1] 也可
例子:
num_str = “0123456789”,下面涉及的数值均为索引值,既可以直接带入
任务:
1.截取从 2 ~ 5 位置的字符串(索引为2到索引为5)
num_str[2:6] # '2345'
2.截取从 2 ~ 末尾 的字符串
num_str[2:] # '23456789'
3.截取从 开始~5位置的字符串
num_str[:6] # '012345'
4.截取完整的字符串
num_str[:] # "0123456789"
5.从0开始,每隔一个字符截取字符串
num_str[::2] # '02468'
6.从索引 1 开始,每隔一个取一个
num_str[1::2] # '13579'
7.截取从 2 ~ 末尾 - 1 的字符串
num_str[2:-1] # '2345678'
8.截取字符串末尾两个字符
num_str[-2:] # '89'
9.字符串的逆序(面试题)
num_str[::-1] # '9876543210'
6.字符串函数
(1)格式化函数
format方法
位置参数
关键字参数
“I{a} love {b}".format(a = "I" , b = "you" )//关键字
"{0} love {1}".format("I","you")//位置
二者可以混合使用
混用时位置参数在前关键字参数在后
'{0:.1f}{1}'.format(27.658,'GB')
打印出来的结果是
27.7GB
(2)大小写转换
string.capitalize() // 把字符串的第一个字符大写 *
string.title() // 把字符串的每个单词首字母大写*
string.lower()//转换string中所有大写字符为小写*
string.upper() // 转换 string 中的小写字母为大写*
string.swapcase() // 翻转string中的大小写*
// 都是返回一个新的字符串
(3)文本对齐
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度width 的新字符串 ,该函数实际上有三个参数
string.rjust(width) 返回一个原字符串右对齐,并且使用空格填充至长度width的新字符串
string.center(width) 返回一个元字符串居中,并使用空格填充至长度width的新字符串
'''
清平调
李白
云想衣裳花想容 春风拂槛露华浓
若非群玉山头见 会向瑶台月下逢
'''
s = ["清平调" , "李白" , "云想衣裳花想容" , "春风拂槛露华浓", "若非群玉山头见","会向瑶台月下逢"]
for i in s:
print(i.center(45))
(4)去除空白字符
string.lstrip()//截掉 string 左边(开始)的空白字符
string.rstrip()//截掉string 右边(末尾) 的空白字符
string.strip() // 截掉左右两边的空白字符
(5)判断类型
string.isspace() // 如果string 中只包含空格,则返回True (需注意:\t,\n,\r 等都是空白字符) *
string.isalnum() // 如果string至少有一个字符并且所有字符都是字母或数字则返回True *
string.isalpha() // 如果 string 至少有一个字符并且所有字符都是字母则返回True *
'''
这三种判断数字方法的区别
-三者都不能判断浮点数
-isdecimal 只能判断阿拉伯数字,不能判断unicode 字符串 (\u00b2,unicode字符 平方)。 最常用的*
-isdigit 除了能判断阿拉伯数字以外还能判断, unicode 字符串
-isnumeric 阿拉伯数字,unicode,汉字数字都能判断
string.isdecimal() // 如果 string 只包含数字则返回 True, 全角数字 *
string.isdigit() // 如果string只包含数字则返回True,全角数字 *
string.isnumeric() //如果string只包含数字则返回True,全角数字
'''
string.istitle() // 如果string 是标题化(每个单词的首字母大写)则返回 True
string.islower()// 如果string 中包含至少一个区分大小写的字符,并且所有这些字符都是小写,则返回True
string.isupper()// 如果String 中包含至少一个区分大小写的字符,并且所有这些字符都是大写,则返回True;
(6)查找和替换
string.startswith(str) // 检查字符串是否以str开头,是则返回True *
string.endswith(str) // 检查字符串是否以 str 结束, 是则返回True *
string.find(str,start = 0,end = len(string)) // 检测 str 是否包含在 string 中,如果 start 和 end *
指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
“”“
string.rfind(str,start = 0, end = len(string)) // 类似于find()函数,不过是从右边开始查找
string.index(str,start = 0, end = len(string)) // 与find() 函数类似,不过如果str不在string 会报错
string.rindex(str,start = 0, end = len(string)) // 类似于 index(), 不过是从右边开始
“”“
string.replace(old_str,new_str,num = 数字,count(old))//把 string 中的 old_str 替换成 new_str, 如果 num 指定,则替换不超过 num 次 *
替换完成后,原字符串不会变化,会得到一个新的字符串
(7)分和连接
string.partition(str)// 把字符串 string 分成一个3元素的元组(str前面,str, str 后面)
string.rpartition(str)// 类似于 partition() 方法,不过是从右边开始查找
string.split(str='',num)// 以str 为分隔符拆分 string ,如果num有指定值,则仅分隔num + 1 个子字符串,str 默认包含 \r ,\t,\n和空格
string.splitlines()// 按照行(\r,\n,\r\n)分隔,返回一个包含各行作为元素的列表
string.join(seq) // 以string 作为分隔符,将seq 中所有的元素(的字符表示) 合并为一个新的字符串
poem_str = "再别康桥\t\n徐志摩\t我挥一挥衣袖\t 不带走一片云彩\t\n"
print(poem_str)
#1.拆分
poem_list = poem_str.split()
print(poem_list)
#2.合并
strs = " ".join(poem_list)
print(strs)