字符串
字符串索引(下标)
在Python中,字符串可以像其它语言的数组一样进行索引使用,方法是:字符串变量名[索引]
。
索引是从0开始,最大的索引值是字符串长度-1,如果使用了超出最大值,将会出现索引错误。
>>> myStr = 'abcdefg'
>>> myStr[0]
'a'
>>> myStr[6]
'g'
>>> myStr[7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
正向的索引也就是从字符串开始向尾部的方向,使用的数值逐渐增加。Python还支持负数的索引值,方向是从字符串尾部向字符串开始的方向,同样超出了索引界限,会出现索引错误:5.1-下标.py
# 下标:给字符串里面每一个字符定义的编号,可以通过下标访问到每一个字符。
# 下标从0开始,最大值是字符串总长度-1
# 访问方式:[下标]
mystr = 'abcdefg'
print('完整输出:', mystr)
print(mystr[0])
print(mystr[5])
# 下标可以为负,从字符串最后一个字符到字符串最开头的一个字符
# 从-1开始,直到-字符串总长度
print(mystr[-1])
print(mystr[-5])
# 下标越界访问会产生错误,不论正负
# print(mystr[7])
# print(mystr[-8])
运行结果如下:
完整输出: abcdefg
a
f
g
c
索引的对应关系见下表:
myStr | a | b | c | d | e | f | g |
---|---|---|---|---|---|---|---|
正向 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
负向 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
字符串函数
Python提供了很多用于字符串处理的函数,可以实现对字符串的各种处理。字符串是不可变数据类型,所以不能对字符串进行任何的修改。
参见:5.2-字符串操作1.py,5.3-字符串操作2.py
<1> find,rfind
查找字符串,严格区分大小写,返回值为字符串第一次出现所在的索引,后面的不管;未找到字符串,返回-1。
rfind从右边开始查找。
mystr.find(str, start=0, end=len(mystr))
例如:
>>> mystr = 'Hello World zhangsan and world'
>>> print('012345678901234567890123456789')
# 012345678901234567890123456789
>>> print(mystr)
Hello World zhangsan and world
>>> print(mystr.find('world'))
25
>>> print(mystr.find('Man'))
-1
>>> print(mystr.find('orld'))
7
<2> index,rindex
基本等同于find,区别:如果index查找不到,给出异常错误。
rindex从右边开始查找。
>>> print(mystr.index('Man'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
<3> startswith,endswith
返回是否以字符串开头或结尾。返回值为bool类型。
>>> print(mystr.startswith('He'))
True
>>> print(mystr.endswith('ld'))
True
<4> isalpha,isdigit,isalnum,isspace
判断字符串是否全是字母,数字,字母或数字,空格。如果是则返回True,否则返回False。注意空字符串在isspace判断的结果是False,因为空格是一个字符,而空字符串没有字符。
>>> print(mystr.isalpha())
False
>>> print('1234'.isdigit())
True
>>> print('abcd1234'.isalnum())
True
>>> print(' '.isspace())
True
>>> print(''.isspace())
False
<5> count
统计字符串出现次数。
>>> print(mystr.count('orld'))
2
<6> replace
替换,第三个参数为替换的最大次数。
>>> print(mystr.replace('d', '==@=='))
Hello Worl==@== zhangsan an==@== worl==@==
>>> print(mystr.replace('d', '==@==', 2))
Hello Worl==@== zhangsan an==@== world
<7> capitalize,title,lower,upper
capitalize将字符串中的第一个字符大写;
title将字符串的每个单词首字母大写;
lower将全部字符改为小写;
upper将全部字符改为大写:
>>> print('abcd efgh'.capitalize())
Abcd efgh
>>> print('abcd efgh'.title())
Abcd Efgh
>>> print(mystr.lower())
hello world zhangsan and world
>>> print(mystr.upper())
HELLO WORLD ZHANGSAN AND WORLD
<8> join
使用字符串来连接join函数中参数的每一个元素,构造出一个新的字符串:
>>> print('_'.join(mystr))
H_e_l_l_o_ _W_o_r_l_d_ _z_h_a_n_g_s_a_n_ _a_n_d_ _w_o_r_l_d
<9> split,splitlines
用给定的字符串切分字符串。输出的结果是一个列表。splitlines按照行分隔,返回一个各行的列表。
>>> print(mystr.split(' '))
['Hello', 'World', 'zhangsan', 'and', 'world']
>>> print(mystr.split('l'))
['He', '', 'o Wor', 'd zhangsan and wor', 'd']
>>> mystr1 = 'hello\nworld\nOK'
>>> print(mystr1)
hello
world
OK
>>> print(mystr1.splitlines())
['hello', 'world', 'OK']
<10> partition,rpartition
将字符串分成三部分,注意如果切分的字符串没有的话,仍然是三部分。
rpartition 从右边开始分解。
>>> print(mystr.partition('zhangsan'))
('Hello World ', 'zhangsan', ' and world')
>>> print(mystr.partition('IT'))
('Hello World zhangsan and world', '', '')
<11> ljust,rjust,center
使字符串在给定的空间里左对齐,右对齐,居中对齐:
>>> print(mystr.ljust(60))
Hello World zhangsan and world
>>> print(mystr.rjust(60))
Hello World zhangsan and world
>>> print(mystr.center(60))
Hello World zhangsan and world
<12> lstrip,rstrip,strip
去掉字符串左边,右边和两边的空格或给定的字符串,不会去掉字符串中间的空格或字符串:
>>> str1 = ' hello world '
>>> print(str1.lstrip())
hello world
>>> print(str1.rstrip())
hello world
>>> print(str1.strip())
hello world
列表
列表由一系列按特定顺序排列的元素组成。列表中的元素可以是不同类型的。列表使用[ ]
括起所有元素,元素用逗号分隔开。
例如:
testList = [1, 'a']
遍历
对列表或其它复合数据类型中,把所有元素挨个进行操作,称之为遍历。可以使用循环对列表进行遍历:5.4-列表遍历.py
# 使用循环进行列表的遍历
mylist = ['abcd', 'zhangsan', 'jiangning']
# 使用for循环实现
for tempstr in mylist:
print(tempstr)
# 使用while循环实现
i = 0
length = len(mylist)
while i < length:
print(mylist[i])
i += 1
结果为:
abcd
zhangsan
jiangning
abcd
zhangsan
jiangning
查找
不论是对列表的插入还是删除操作,或者是单纯的查找,都需要判定某个元素在列表中是否存在,Python使用in和index实现查找。使用count实现计数。例如:5.5-列表查找.py
# in, not in
mylist = ['abcd', 'zhangsan', 'jiangning']
if 'zhang' in mylist:
print('存在')
else:
print('不存在')
# index
mylist = ['a', 'b', 'c', 'a', 'b']
print(mylist.index('a', 0, 4))
# count
print(mylist.count('a'))
结果为:
不存在
0
2
添加/插入/修改
对列表可以添加元素,可以使用append,extend在列表的结尾处添加元素,也可以使用insert在列表中插入元素。例如:5.6-列表插入操作.py
# 添加操作
# append 添加,把添加内容直接作为元素添加
# 对列表操作,列表的内容会发生改变
mylist = ['abcd', 'zhangsan', 'jiangning']
print(mylist)
mylist.append('defg')
print(mylist)
# extend 添加,把列表拆成元素添加
# append 添加
mylist = ['abcd', 'zhangsan', 'jiangning']
appendlist = ['aaa', 'bbb']
mylist.append(appendlist)
print('append:')
print(mylist)
# extend
mylist = ['abcd', 'zhangsan', 'jiangning']
extendlist = ['aaa', 'bbb']
mylist.extend(extendlist)
print('extend:')
print(mylist)
# insert 在index位置前插入元素
print('insert:')
mylist = ['abcd', 'zhangsan', 'jiangning']
print(mylist)
mylist.insert(1, 'defg')
print(mylist)
# insert 对于列表的插入,等同于append做法
mylist = ['abcd', 'zhangsan', 'jiangning']
print(mylist)
mylist.insert(1, appendlist)
print(mylist)
# 对列表元素进行修改,使用索引定位到元素,直接赋值修改
mylist[1] = 'lisi'
print(mylist)
结果为:
['abcd', 'zhangsan', 'jiangning']
['abcd', 'zhangsan', 'jiangning', 'defg']
append:
['abcd', 'zhangsan', 'jiangning', ['aaa', 'bbb']]
extend:
['abcd', 'zhangsan', 'jiangning', 'aaa', 'bbb']
insert:
['abcd', 'zhangsan', 'jiangning']
['abcd', 'defg', 'zhangsan', 'jiangning']
['abcd', 'zhangsan', 'jiangning']
['abcd', ['aaa', 'bbb'], 'zhangsan', 'jiangning']
['abcd', 'lisi', 'zhangsan', 'jiangning']
删除
列表的删除操作有这几种:删除某一个元素,删除最后一个元素和删除某一个指定值的元素。例如:5.7-列表删除.py
# 删除:del, pop, remove
# del 删除给定下标的元素
print('del:')
mylist = ['a', 'b', 'c', 'a', 'b']
print(mylist)
del(mylist[1])
print(mylist)
# pop 删除最后一个或指定索引的元素
print('pop:')
mylist.pop()
print(mylist)
# remove 删除指定值的元素
# 一次只删除一个
print('remove:')
mylist.remove('a')
print(mylist)
mylist.remove('a')
print(mylist)
结果为:
del:
['a', 'b', 'c', 'a', 'b']
['a', 'c', 'a', 'b']
pop:
['a', 'c', 'a']
remove:
['c', 'a']
['c']
排序
通常情况下,列表中的元素有确定的顺序时,便于各种使用,所以要对列表中的元素进行排序。Python提供排序函数对列表进行排序:5.8-列表排序.py
# sort, reverse
mylist = [6, 3, 8, 4, 2, 6, 4]
print(mylist)
# 默认为升序排列
mylist.sort()
print(mylist)
# 如果需要降序排列,需要指定reverse=True
mylist.sort(reverse=True)
print(mylist)
# 字符串排序,根据字符集的值排序,数字<大写字母<小写字母
mylist = ['abcd', 'zhangsan', 'jiangning', 'Hello', '1234', '+-*/']
print(mylist)
mylist.sort()
print(mylist)
结果为:
[6, 3, 8, 4, 2, 6, 4]
[2, 3, 4, 4, 6, 6, 8]
[8, 6, 6, 4, 4, 3, 2]
['abcd', 'zhangsan', 'jiangning', 'Hello', '1234', '+-*/']
['+-*/', '1234', 'Hello', 'abcd', 'jiangning', 'zhangsan']