【第三章】Python基础之字符串st
字符串str
- 一个个字符组成的有序的序列,是字符的集合
- 使用单引号、双引号、三引号引住的字符序列
- 字符串是不可变对象,是字面常量
Python3起,字符串都是Unicode类型
初始化
s1 = 'string'
s2 = "string2"
s3 = '''this's a "String" '''
s4 = 'hello \n magedu.com'
s5 = r"hello \n magedu.com"
s6 = 'c:\windows\nt'
s7 = R"c:\windows\nt"
s8 = 'c:\windows\\nt'
name = 'tom'; age = 20 # python代码写在一行,使用分号隔开,不推荐
s9 = f'{name}, {age}' # 3.6支持f前缀
sql = """select * from user where name='tom' """
r前缀:所有字符都是本来的意思,没有转义
f前缀:3.6开始,使用变量插值
索引
字符串是序列,支持下标访问。但不可变,不可以修改元素。
sql = "select * from user where name='tom'"
print(sql[4]) # 字符串'c'
sql[4] = 'o' # 不可以
#定义
x = 'adasda'
输入:for a in x:
print(a,type(a))
输出:a <class 'str'>
d <class 'str'>
a <class 'str'>
s <class 'str'>
d <class 'str'>
a <class 'str'>
连接
-
+加号
- 将2个字符串连接起来
- 返回一个新的字符串
-
join方法
- sep.join(iterable)
- 使用指定字符串作为分隔符,将可迭代对象中字符串使用这个分隔符拼接起来
- 可迭代对象必须是字符串
- 返回一个新的字符串
x = 'ab'
x = x + 'cd'
print(','.join(x))
print('\t'.join(x))
print('\n'.join(x))
print('-'.join(range(5))) # 可以吗 答案:不可以
输入:x = 'ab'
x = x + 'cd'
x
输出:'abcd'
输入:"*".join('adasdsa')
输出:'a*d*a*s*d*s*a'
#map(str, range(5)) 第一个参数是一个函数(这里是 str,用于将整数转换为字符串),第二个参数是一个可迭代对象(这里是 range(5))
输入:print('-'.join(map(str,range(5))))
输出:0-1-2-3-4
字符查找
- find(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub
- 找到返回正索引,没找到返回-1
- rfind(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从右至左,查找子串sub
- 找到返回正索引,没找到返回-1
#定义字符串
x='abcdeabc'
输入:x.find('ab')
输出:0
输入:x.rfind('ab')
输出:5
输入:x.rfind('adb')
输出:-1
#会从索引1开始找ab
输入:x.find('ab',1),x.find('ab',5),find('ab',5,7)
输出:(5, 5, 5)
#前包后不包
输入:x.find('abc',4,7)
输出:-1
这两个方法只是找字符串的方向不同,返回值一样。找到第一个满足要求的子串立即返回。特别注意返
回值,找不到返回的是负数-1。
这两个方法效率高吗?要不要用?
这两个方法效率真不高,都是在字符串中遍历搜索,但是如果找子串工作必不可少,那么必须这么做,
但是能少做就少做。
-
index(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub
- 找到返回正索引,没找到抛出异常ValueError
-
rindex(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub
- 找到返回正索引,没找到抛出异常ValueError
index方法和find方法很像,不好的地方在于找不到抛异常。推荐使用find方法。
s = 'magedu.ed