字符串
定义
4种定义方式
- 两个单引号包裹:’…’
- 两个双引号包裹:”…”
- 前后各三个单引号包裹:”’…”’
- 前后各三个双引号包裹:”“”…”“”
定义时注意点
- 字符串外层使用单引号,内层就使用双引号,反之亦然
- 字符串中要保留单/双引号字符出现的时候,使用转义符
- ”’…”’和”“”…”“”中定义的字符串里面出现单/双引号的时候,自动按照转义处理(也就是说按照原始)
下标
用下标可以确定字符串中各个字符的位置
下标其实是偏移量,从数据块开头开始,偏移0各单位就是第一个单位数据,所以下标是从0开始的。
切片
语法
[起始:结束:步长](这里注意不包含结束字符)
方向
切片方向默认是从左往右,步长为负数才会掉头
常见
格式 | 含义 |
---|---|
str[n:m] | 下标第n位到第m位,不包含第m位 |
str[n:-1] | 下标第n位到倒数第二位 |
str[n:] | 第n位到最后全部 |
str[:m] | 从头开始到m位,不包含m |
str[n:m:a] | n位到m位,每a个作为间隔 |
str[::-1] | 翻转 |
注意
切片没有越界异常,边界写的太大,仍然会按照最大位置走
常见操作方法
find
mystr.find(str,start=0,end=len(mystr))
检测str是否包含在mystr的规定部分中,如果有返回索引值,没有返回-1
index
mystr.index(str,start=0,end=len(mystr))
同上find,不过没有找到时直接报异常
count
mystr.count(str,start=0,end=len(mystr))
返回str在mystr中的start和end之间出现的次数
replace
mystr.replace(str1,str2,mystr.count(str1))
把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次
split
mystr.split(str=” “,2)
以str为分隔符切片mystr,如果maxsplit有指定值,则仅分隔maxsplit次。如果没有指定分隔符,默认所有空白字符都是(包括:空格,tab,换行)
capitalize
mystr.captalize()
把字符串的第一个字符大写
title
mystr.title()
将字符串中每个单词大写
startswith
mystr.startswith(str)
检查字符串是否以str开头,是则返回True,否则返回False
endswith
mystr.endswith(str)
检查mystr是否以str结束,如果是返回True,否则返回False
lower
mystr.lower()
将mystr中字符全部小写
upper
mystr.upper()
将mystr中字符全部大写
ljust
mystr.ljust(width[,fillchar])
返回一个原字符串左对齐,并使用指定的字符填充至长度width的新字符串,默认填充字符是空格
rjust
mystr.rjust(width[,fillchar])
同上,原字符右对齐,左边填充
center
mystr.center(width[,fillchar])
同上,原字符串居中,两边填充
lstrip
mystr.lstrip(char)
删除字符串mystr左端指定的字符,默认删除空白字符
rstrip
mystr.rstrip(char)
同上,删除右边
strip
mystr.strip(char)
同上,删除两端
rfind
mystr.rfind(str,start=0,end=len(mystr))
类似find()函数,不过从右边开始查找
rindex
mystr.rindex(str,start=0,end=len(mystr))
类似index,不过从右边开始
partition
mystr.partition(str)
将mystr以str分割成三部分,str前,str,str后
rpartition
mystr.rpartition(str)
同上,不过从右边开始
splitlines
mystr.splitlines()
按照\n换行符分割,返回一个包含各行内容作为元素的列表
isalpha
mystr.isalpha()
如果mystr所有字符都是字母,则返回True,否则返回False
isdigit
mystr.isdigit()
如果mystr只包含数字则返回True,否则返回False
isalnum
mystr.isalnum()
如果mystr中只包含数字,则返回True,否则返回False
issapce
mystr.isspace()
如果mystr中只包含空白字符,则返回True,否则返回False
join
str.join(可迭代对象)
将可迭代对象中各个元素中间插入str,然后合并构成一个新的字符串
列表
定义
1. a=[元素1,元素2,....]
2. a=[] :创建空的
3. a=list() 创建空的
4. a=list(可迭代对象)
元素可以是不同的类型,但是一般建议或使用的时候都是存储的是同类型的数据
第四种中可以是一个列表,那个生成的列表实现浅拷贝
遍历
for
for 临时变量 in 列表对象:
使用列表元素代码
while
i=0
while i<len(列表对象):
列表对象[i]的元素提取并使用
i+=1
常见操作
增加元素
append
在列表的后部整体添加,相当于a[len(a):]=[x]
insert
insert(index,obj)
在指定位置插入
extend
将可迭代对象中每个元素分别依次添加在该列表后方,相当于:a[len(a):]=b
+=
同上extend
修改元素
a[下标] = 值
赋值语句,下标如果上面没有值会抛越界异常
删除元素
del
del a[n]
删除a列表中下标为n的元素
pop
a.pop([index=-1])
泵出指定下标一个元素并返回,默认下标是-1,也就是最后一个
remove
列表对象.remove(元素值)
根据列表中元素删除,默认只删除第一次遇到的元素
clear
a.clear()
清空所有元素,相当于del a[:]
查询元素
- in:如果存在那么结果为True,否则返回false
- not in:同上反之
- a.index(b,n,m):在a列表中的下标为n到m-1的元素中查询b,查询到返回下标,没有查询到就抛异常
- a.count(b):在列表a中查询b出现了多少次
- 通过下标查询
- 通过切片查询
排序
- sort
a.sort([reverse=False])
默认按照特定规则,从小到大排序,reverse=True的时候是按照由大到小排列 - reverse
a.reverse()
列表翻转
浅拷贝
- copy
a.copy()
返回一个列表的浅拷贝,也就是说,将各元素的内存地址引用重新组织成一个新的列表,然后将列表地址返回赋值。重点是,前后两个列表的内存地址不一致,但是内部元素的地址引用不变。相当于:a[:] - 切片
b=a[:]
解释同上(这里待以后研究,可能有解释不到位之处)
列表推导式
[要存储的表达式 包含变量的计算表达式]
将后面的表达式计算出来,遍历或者其他,然后将前面需要的变量返回给前面,然后按照前面表达式计算后存储成一个列表
例子:[x**2 for x in range(1,10)]:这里后面for遍历一个元素就将x传给前面,存储后又继续遍历
注意
后面的表达式可以嵌套使用几种和几个[x**2 for x in range(1,100) if x % 3 == 0 ]:将1到100之间能被3整除的数计算平方然后放在列表中
嵌套
嵌套:列表中元素可以是任意类型的,所以也可以嵌套列表
元组
创建
- a=():创建空的
- a=(元素1,元素2,….)
- a=tuple():创建空的
- a=tuple(可迭代对象)
格式
(元组元素1,元组元素2,…,元组元素n)
操作
元组定义之后就无法修改内部元素了
其他操作基本和列表相同
注意点
一个元素的元组,为了和(数学表达式)这种格式分开,必须在元素后面加逗号。
a = (2, )
格式
{元素1,元素2,…元素n}
定义创建
- a=set():创建set对象
- a={元素}:这里注意,内部必须有元素,不然和字典冲突
- a=set(可迭代对象)
特点
内部元素的存放方式是按照将元素进行哈希算法计算后组织存放的
无序:因为通过算法存放的,所以,无序(存放的位置和添加的时间无关)
不重复
不能通过下标(因为没有下标这么个说法)直接查看和修改
嵌套
内部元素由于是需要哈希的,所以只有可以哈希的才能被嵌套存放,暂时是数字,布尔值,字符串,元组
方法操作
- add()
- clear()
- copy() 浅拷贝
- pop() 移除并返回任意一个元素
- remove(元素) 移除元素,如果不存在就抛异常
- discard(元素) 移除该元素,如果没有该元素,不处理
其他操作
交并补等,这里不详述,以后有机会补上
下面是除方法之外,还支持的几种位运算符计算
+ &:交集
+ |:并集
+ -:差
+ ^:两个集合都独有的组合起来返回
运算符
运算符 | python表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1,2]+[3,4] | [1,2,3,4] | 合并 | 字符串,列表,元组 |
* | [‘hi’]*3 | [‘hi’,’hi’,’hi’] | 复制 | 字符串,列表,元组 |
in | 3 in (1,2,3) | True | 元素是否存在 | 字符串,列表,元组,字典 |
not in | 4 not in (1,2,3) | True | 元素是否存在 | 字符串,列表,元组,字典 |
字典这里in方法,只会判断键,因为它是替换python2中has_key()的
内置函数
方法 | 描述 |
---|---|
cmp(item1,item2) | 比较两个值,python3取消了,不支持 |
len(item) | 容器中元素个数 |
max(item) | 返回容器中元素最大值 |
min(item) | 返回容器中元素最小值 |
del(item) | 删除变量(其实就是del item,为了保持格式一致和好用) |
多个共同遍历
同时循环两个或更多的序列,使用zip()打包
for x,y in zip(a,b):
....
注意
如要在循环内部修改正在遍历的序列,最好首先制作副本,在序列上循环不会隐式的创建副本,切片表示法(列表)尤其方便(这里其实浅拷贝的都行)
浅拷贝排序
sorted(a)排序,浅拷贝并排序,建立一个排序后的副本