3.1字符串方法
查找
- str.find()
- 参数
- str — 指定检索的字符串
- beg — 开始索引,默认为0。
- end — 结束索引,默认为字符串的长度。
- 参数
- index()
- 不同与find(), 查找不到会抛出异常
# 查找,find()、index()、rfind()、rindex()
s = '学习Python'
s.find('P') # 2, 返回第一次出现的子串的下标
s.find('h', 2) # 5, 设定下标2开始查找
s.find('23333') # -1, 查找不到返回-1
s.index('y') # 3, 返回第一次出现的子串的下标
s.index('P') # 不同与find(), 查找不到会抛出异常
转换大小写
- str.upper()
- str.lower()
- str.swapcase() 大小写互换
- str.capitalize()将字符串的第一个字母变成大写,其他字母变小写。
- istitle()方法检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。
# 转大小写, upper()、lower()、swapcase()、capitalize()、istitle()、isupper()、islower()
s = '学习Python'
s.upper() # '学习PYTHON'
s.swapcase() # '学习pYTHON', 大小写互换
s.istitle() # True
s.islower() # False
替换
replace()
- old — 将被替换的子字符串。
- new — 新字符串,用于替换old子字符串。
max — 可选字符串, 替换不超过 max 次
# 替换,还可以使用正则表达式替换
s.replace('Python', 'Java') # '学习Java'
去空格
strip()
- 默认为空格
- 参数可设为指定字符,即可删除指定字符
- lstrip()
- rstrip()
s = ' baidu'
print(s.strip('bai'))
3.2切片
s = '学习Python'
# 切片
s[0], s[-1], s[3:], s[::-1] # '学', 'n', 'Python', 'nohtyP的习学'
3.3格式化
# 格式化
s1 = '%s %s' % ('Windrivder', 21) # 'Windrivder 21'
s2 = '{},{}'.format('HELLO','python')
s3 = '{1},{0},{1}'.format('HELLO','python')
s4 = '{name}: {age}'.format(age=21, name='Windrivder')
3.4连接和分割
# 连接与分割,使用 + 连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,所以推荐使用join
l = ['2017', '03', '29', '22:00']
s5 = '-'.join(l) # '2017-03-29-22:00'
s6 = s5.split('-') # ['2017', '03', '29', '22:00']
3.5遍历字符串
- for 语句遍历
fruit = 'banana'
for letter in fruit:
print(letter)
fruit = 'banana
for index < len(fruit):
letter = fruit[index]
print(letter)
index = index +1
frist = 'JKLMNOPQ'
second = 'ack'
for letter in frist:
print(letter + second)
3.6搜索、循环和计数
def find(word , letter):
index = 0
while index < len(word):
if word[index]==letter:
return index
index += 1
return -1
find('banana','n')
计数:
count =0
word = 'banana'
for letter in word:
if letter == 'a':
count = count + 1
print(count)
练习题
两个字符串中都有的字母:
def both_have(word1,word2):
list_both_have=[]
for letter in word1:
if letter in word2:
list_both_have.append(letter)
return list_both_have
print(both_have('apples','oranges'))
是否两个字符串时颠倒的:
def is_reverse(word1,word2):
if len(word1) != len(word2):
return False
i = 0
j = len(word2)-1 #必须减一,要不然会出现word2的index超出范围的错误
while j >= 0 :
print(i,j)
if word1[i] != word2[j]:
return False
i = i + 1
j = j - 1
return True
is_reverse('hello','olleh')
判断一个字符是否为可颠倒的 : 例如 noon ,倒过来还是noon
def is_p(word):
if word [:] == word[::-1]:
return True
print(is_p('noon'))
密码管理, 传递特殊密码时,早期都是通过错位的方式进行传递到,需要两个参数(原始字符串,错位的位数)
def rotate_word (strings, num):
string_rotated = ''
for letter in strings:
n = ord(letter)
string_rotated = string_rotated + chr(n+num)
return string_rotated
new_str = rotate_word('abc',1)
print(new_str)
## List 方式拼接字符更节省内存,更高效。
def rotate_word (strings, num):
string_rotated = ''
list_str = []
for letter in strings:
n = ord(letter)
n_new = ((n + num)-97)%26+97 # 这个很关键,可以判断两个数字相加之后超过z的值后的计算
list_str.append(chrn_new)
#string_rotated = string_rotated + chr(n_new)
string_rotated = ''.join(list_str)
return string_rotated
new_str = rotate_word('chd',1)
print(new_str)