数据类型与方法"/>
Python基本数据类型与方法
Python基本数据类型与方法
- 一、列表(元组)
- 二、字符串
- 三、字典
- 四、集合
补充:
# 对于数字而言,没有太多要说的
# 1、在python中没有单精度、双精度之分,float所支持的即为其他语言的双精度
# 2、在python3中:
# / 为除法,结果自动转型为浮点型
# // 为整除,如果被除数或者除数至少有一个为float类型,那么结果也为float类型 print(1 / 3) # 0.3333333333333333
print(1 // 3) # 0
print(1 // 3.0) # 0.0# 3、复数(complex)类型
# 表示复数的语法:real + image j
# 实数部分和虚数部分都是浮点数
# 虚数部分必须有后缀j或Ja = 5 + 4j
b = 5 - 4j
print(type(a)) # <class 'complex'>
print(a * b) # (41+0j)# 4、常用的一些内置方法
# abs():绝对值
# pow():指数幂
# divmod():求商和余数
# ......
一、列表(元组)
-
特点
- 列表可以修改(即为可变数据类型)
- 元组不可以修改(即为不可变数据类型)
- 列表以方括号
[]
表示,元组以括号()
表示(需要注意的是,当元组只有一个元素时,末尾一定要有一个逗号,
来表示是元组而不是表达式) - 可以存储任何类型的值(对象),这意味着可以嵌套
-
方法(注:以下为列表的方法,元组只有index和count方法,其他方法没有)
方法 参数 返回值 说明 append(object) object:要添加的对象 None 把object作为一个整体添加进列表末尾,object可以是任意一个对象 clear() 无 None 清空列表 copy() 无 list 浅拷贝列表,并返回这个浅拷贝的列表 count(value) value:要查找的值 int 返回在列表中value出现的次数(没有出现则返回0) extend(iterable) iterable:要添加进列表的可迭代对象 None 扩展列表,把iterable遍历一个个添加到列表末尾(与append不同,append是作为一个整体,而extend是遍历每个添加进去) index(value, start=None, stop=None) value:要查找的值
start:要查找的开始索引(默认为0,也就是从第一个开始)
stop:要查找的结束索引(默认为列表最后一个元素的索引)int 返回列表第一次出现value对应的索引(如果value不在列表中,则会报错) insert(index, object) index:要插入到列表的索引位置
object:要插入的对象None 把对象插入到列表的指定索引位置 pop(index=None) index:要删除值所在的索引位置(默认删除列表最后一个) Any 删除列表中对应索引位置的值,并返回这个值(如果列表为空,或者超出列表的最大索引,则会报错) remove(value) value:要删除的值 None 删除列表里第一个为指定值的元素(不存在时则会报错) reverse() 无 None 翻转列表(就地翻转,不会返回一个新的列表,如果要想返回新的列表,请使用python的reversed内置函数) sort(key=None, reverse=None) key:根据什么排序(默认就是ascii值大小排序)
reverse:是否翻转列表(默认不翻转)None 排序列表(就地排序,不会返回一个新的列表,如果要想返回新的列表,请使用python的sorted内置函数) -
示例
# 1. append li = [1,2,3] li.append("sb") li.append([5,6]) # 会把对象作为一个整体添加到列表里 print(li) # 输出:[1, 2, 3, 'sb', [5, 6]]# 2. clear li.clear() print(li) # 输出:[]# 3. copy li = [1,2,3, ['a', 'b']] copy_li = li.copy() # 对应数字、字符串、和其他“原子”类型的对象,没有涉及深、浅拷贝这么一说(因为一旦创建,不可修改) # 容器类型才涉及深、浅拷贝 copy_li[0] = 8 # 所以修改这个,原列表不会跟着修改 copy_li[3][0] = 'hahaha' # 由于浅拷贝,只是引用了原来对象的地址,所以原列表也会跟着变化 print(copy_li) print(li) # 输出:[8, 2, 3, ['hahaha', 'b']] # [1, 2, 3, ['hahaha', 'b']]# 可以看到:以下两个值不一样,说明内存地址不一样 print(id(copy_li[0])) print(id(li[0])) # 可以看到,以下两个值是一样的,说明内存地址一样,所以这就是浅拷贝 print(id(copy_li[3])) print(id(li[3]))# 4. count li = [1,2,2,3,2] print(li.count(2)) # 输出:3# 5. extend li = [1] li.extend([4,"sb",(1,2)]) # 把可迭代对象每个元素遍历添加,而不是作为一个整体添加 print(li) # 输出:[1, 4, 'sb', (1, 2)]# 6. index li = ["weg","jhytj","happy", "meij", "ioqjwofn", "happy"] print(li.index("happy")) # 返回第一次出现的索引 # 输出:2# 7. insert li = [1,2,3,4] li.insert(2,"sb") print(li) # 输出:[1, 2, 'sb', 3, 4]# 8. pop li = [1,2,3,4,5] x = li.pop() # 不指定,则删除最后一个 y = li.pop(1) # 删除指定索引的 print(x) print(y) # 输出:5 # 2 # 9. remove li = [1,2,3,4,3,5] li.remove(3) # 只删除第一个3 print(li) # 输出:[1, 2, 4, 3, 5]# 10. reverse li = [1,2,3,4,5] li.reverse() print(li) # 输出:[5, 4, 3, 2, 1]# 11. sort li = [1,3,4,2,5] li.sort() # 默认从小到大排序 print(li) # 输出:[1, 2, 3, 4, 5]# 另外:sort还接受两个可选参数:key和reverse li = ['abere','zed','haha','mrtcsefgsdfs','zaf'] li.sort() # 字符串则是根据ASCII值大小进行比较(逐个字母比较,如果相同则比较下一位) print(li) # 输出:['abere', 'haha', 'mrtcsefgsdfs', 'zaf', 'zed']li.sort(key=len) # 根据长度排序(如果长度相同,则还是按照ASCII值大小进行比较) print(li) # 输出:['zaf', 'zed', 'haha', 'abere', 'mrtcsefgsdfs']li.sort(reverse=True) # 相当于li.sort()之后再li.reverse() print(li) # 输出:['zed', 'zaf', 'mrtcsefgsdfs', 'haha', 'abere']
二、字符串
-
特点
- 一旦创建不可修改(我们平时所见的修改,比如调用方法,都是返回新的字符串,而不是就地修改原字符串)
- 可以用单引号
''
、双引号""
和三引号''' '''或""" """
来表示(一般尽量使用双引号,因为经常要进行json交互,而json就需要使用标准的双引号,可以减少很多不必要的麻烦)
-
方法
方法 参数 返回值 说明 index(sub, start=None, end=None) sub:要查找的子串
start:要查找的起始索引,默认为0
end:要查找的结束索引(不包含),默认为字符串长度-1int (从左往右查)返回第一次出现子串的第一个字符的索引,找不到则会报错 rindex(sub, start=None, end=None) sub:要查找的子串
start:要查找的起始索引,默认为0
end:要查找的结束索引(不包含),默认为字符串长度-1int (从右往左查)返回第一次出现子串的第一个字符的索引,找不到则会报错 find(sub, start=None, end=None) sub:要查找的子串
start:要查找的起始索引,默认为0
end:要查找的结束索引(不包含),默认为字符串长度-1int (从左往右查)返回第一次出现子串的第一个字符的索引,找不到则会返回-1(注意:-1不代表是最后一个,如果要查找的子串(单个字符)是最后一个,则应该为str.length - 1) rfind(sub, start=None, end=None) sub:要查找的子串
start:要查找的起始索引,默认为0
end:要查找的结束索引(不包含),默认为字符串长度-1int (从右往左查)返回第一次出现子串的第一个字符的索引,找不到则会返回-1(注意:-1不代表是最后一个,如果要查找的子串(单个字符)是最后一个,则应该为str.length - 1) count(sub, start=None, end=None) sub:要查找的子串
start:要查找的起始索引,默认为0
end:要查找的结束索引(不包含),默认为字符串长度-1int 返回子串出现的次数(没有出现则返回0) strip(chars=None) chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’) str 移除字符串左右两侧指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的) lstrip(chars=None) chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’) str 移除字符串左边指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的) rstrip(chars=None) chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’) str 移除字符串右边指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的) split(sep=None, maxsplit=-1) sep:要通过什么分隔字符(串)来进行分隔(不指定,则默认以单个或多个连续的空白字符(空格、制表符、换行符等)作为分隔符)
maxsplit:最大分隔次数(默认为分隔所有;如果指定了次数,则从左到右,只分隔指定的次数)list 通过分隔符(串)按从左到右的顺序对字符串进行切割,并返回一个列表 format(*args, **kwargs) args:位置参数
kwargs:关键字参数str 返回格式化(替换包含{}的)后的字符串(可以通过顺序、索引、关键字来指定替换方式,详细使用请看示例) join(iterable) iterable:可迭代对象(注:序列的元素必须都要是字符串,否则会报错) str 将序列的元素以字符串本身(即谁调用)为指定字符进行拼接,然后返回这个拼接后的字符串 replace(old, new, count=None) old:要被替换的子串
new:想要替换成的子串
count:替换次数(默认为替换全部;如果指定,则只会从左到右替换count个)str 以新的子串替换旧的子串(如果旧的子串不存在则会报错),并返回替换后的字符串 lower() 无 str 返回全部大写字符转成小写的字符串(只对ASCII编码,也就是‘A-Z’有效) upper() 无 str 返回全部小写字符转成大写的字符串 encode(encoding=‘utf-8’, errors=‘strict’) encoding:编码方式(默认为utf-8)
errors:编码错误处理方案(默认为’strict’,即抛出异常;还有’ignore’,'replace’等值可选)bytes 返回字符串以指定编码方式编码后的二进制(对应的二进制可以用decode进行解码) center(width, fillchar=None) width:填充长度
fillchar:要填充的字符(默认为空格,并且只能为一个字符,为多个字符时会报错)str 返回以填充字符填充,居中的字符串(如果填充长度小于等于字符串本身长度,则不会显示填充字符) capitalize() 无 str 返回首字符大写,其他字符小写的字符串 casefold() 无 str 返回全部大写字符转成小写的字符串(比lower()更高级,可以对其他语言的大写转换成小写) title() 无 str 返回所有单词首字母大写,其他字母小写的字符串 startswith(prefix, start=None, end=None) prefix:以什么子串作为开头
start:开始检查的索引(默认为0)
end:结束检查的索引(默认为字符串长度-1;同样,这里也是不包含这个索引位置,即常见的左闭右开区间)bool 检查字符串是否以指定的子串作为开头,返回布尔值 endswith(suffix, start=None, end=None) suffix:以什么子串作为结尾
start:开始检查的索引(默认为0)
end:结束检查的索引(默认为字符串长度-1;同样,这里也是不包含这个索引位置,即常见的左闭右开区间)bool 检查字符串是否以指定的子串作为结尾,返回布尔值 zfill(width) width:需要填充0的长度 str 返回往字符串左边补0(直至字符串长度达到填充长度;如果填充长度≤字符串长度,则不进行填充)的字符串 isdecimal() 无 bool 检查字符串是不是只包含数字(只能识别123这种),返回布尔值 isdigit() 无 bool 检查字符串是不是只包含数字(除了123,还可以识别①②③这种),返回布尔值 isnumeric() 无 bool 检查字符串是不是只包含数字(除了123、①②③,还可以识别中文的数字,如一、壹等),返回布尔值 isalpha() 无 bool 检查字符串是不是只包含字母,返回布尔值 isalnum() 无 bool 检查字符串是不是只包含字母数字(这里的数字指isnumeric(),也就是说中文等的数字也是可以的),返回布尔值 islower() 无 bool 检查字符串是不是所有字符都为小写,返回布尔值 isupper() 无 bool 检查字符串是不是所有字符都为大写,返回布尔值 isspace() 无 bool 检查字符串是不是只包含空格(可以是空格,\n\t等空白字符),返回布尔值 isidentifier() 无 bool 检查字符串是不是有效的标识符(如果字符串仅包含字母数字字母(a-z)和(0-9)或下划线(_),且不能以数字开头或包含任何空格),返回布尔值 isprintable() 无 bool 检查字符串是不是可打印字符(通常用来检查转义字符,如\n \t这种就会返回False),返回布尔值 istitle() 无 bool 检查字符串的所有单词是否以首字母大写,其余字母小写,返回布尔值
三、字典
-
特点
- 无序(意味着不能通过索引、切片等方式访问)
- 键值对形式存储,并且键必须是不可变数据类型(数字、字符串、元组等),并且键是唯一的,值可以不唯一
- 其本身是可变数据类型,而且也可以支持嵌套
- 字典以花括号
{}
表示,里面的元素用键: 值
来表示
-
方法
方法 参数 返回值 说明 items() 无 iterable 通常使用for key, value in x.items()的方式来进行解包,可以遍历字典的所有项(键值对);也可以使用list()来把x.items()转换成列表,里面每个元素是一个元组(第一个元素是键,第二个元素是值) keys() 无 iterable 通常使用for key in x.keys()的方式来进行遍历,可以遍历字典的所有键;也可以使用list()来把x.keys()转换成列表,里面每个元素就是每个键 values() 无 iterable 通常使用for value in x.values()的方式来进行遍历,可以遍历字典的所有值;也可以使用list()来把x.values()转换成列表,里面每个元素就是每个键对应的值(注意:由于值不唯一,所以有可能有重复的) get(key, default=None) key:要获取字典中的哪个键的值
default:当找不到对应键时返回的值(如果不指定,默认返回None)Any 返回字典中对应键的值,如果不存在,则返回指定的默认值(没有指定则默认返回None)(效果等同于x[key],只不过x[key]当key不存在时会报错,所以推荐使用get方法) copy() 无 dict 浅拷贝字典,并返回这个浅拷贝的字典 clear() 无 None 就地清空字典,返回None update(dict=None, *args, **kwargs) dict:需要添加的字典
*args:传入一个元组或列表(里面每个元素是一个元组,第一个值为键,第二个值为键对应的值)
**kwargs:以关键字的方式添加键值对None 更新字典的键值对(如果原来没有对应的键,则新增;否则会覆盖原有键的值)
使用方式:
1、update({“key”: “value”}),这种就是直接传入一个字典
2、update([(“k1”, “v1”), (“k2”, “v2”), …]),这种就是传入一个列表或者元组,里面每个元素是一个元组(元组第一个值为键,第二个值为键对应的值)
3、update(k1=v1, k2=v2, …),这种就是通过关键字参数的方式添加键值对(注意:这种k1,k2最后只会是字符串,不能是别的,而且不要加上""引号,因为是当做关键字参数,v1,v2则可以是任意值)
4、update(**some_dict),和第3种方式类似,不一样的写法,不过也是和第3种一样,键只能是字符串,如果为其他是会报错的)setdefault(key, default=None) key:要设置到字典中的键
default:key对应的值(如果不指定,默认返回None)Any 1、如果该键在字典中存在,则不进行更新(覆盖),并返回原有字典中该键的值
2、如果该键在字典中不存在(或者本身是个空字典),则添加进字典,并返回添加的值(也即参数default的值)
注意:不管存不存在,这个方法都有返回值pop(key, default=None) key:要删除字典中的键
default:如果字典中本身不存在该键,则返回指定的值(该参数可以不传)Any 1、如果该键在字典中存在,则删除字典中对应的键值对,并且返回原来字典中这个键所对应的值
2、如果该键在字典中不存在(或者本身是个空字典),并且没有指定参数default的值,则会抛出KeyError的异常(而不是返回None);如果指定参数default的值,则不会报错,并且返回这种default的值
注意:key是必填参数,和列表不一样,因为字典本身无序,pop()不指定参数不会弹出最后一个元素,所以必须指定keypopitem() 无 Any 删除字典中最后一个项(键值对),并且以元组的方式返回对应的键和值,即 (key, value) 的形式
如果本身是个空字典,则抛出KeyError异常fromkeys(seq, value=None) seq:序列,可以是字符串、元组、列表,会遍历每个值作为键(字符串的话,就相当于把每个字符作为键)
value:所有键对应的值(不指定默认为None)dict 创建一个新字典
注意:所有键的值都是一样的,都为参数value对应的值;另外,这个方法是创建一个新字典,不会在原有字典进行更新,记得拿一个变量来接收保存下来
四、集合
-
特点
- 无序(意味着不能通过索引、切片等方式访问)
- 元素不能重复(自动去重)
- 集合以花括号
{}
来表示,里面每个元素用逗号,
分隔开(注意:如果要创建空集合,使用内置的set()
函数来创建,因为{}
表示的是空字典) - 对于
set()
来说,是可变数据类型;对于frozenset()
来说,是不可变数据类型 - 集合不能存储任意值,它只能存储可hash对象(不可变数据数据:数字、字符串、元组等),意味着集合不能嵌套集合,但它可以以
frozenset()
作为元素
-
方法
方法 参数 返回值 说明 add(element) element:需要添加进集合的值(必须是可hash对象) None 类似list的append方法,把element作为一个整体添加到集合
如果添加的元素是不可hash对象(即为字典、列表、集合set()等),会抛出TypeError异常update(s: iterable) s:可迭代对象,列表、元组等 None 类似list的extend方法,一个个遍历添加到集合
注意:参数可以传list,但是其里面的每个元素还是要满足可hash这个条件,否则依然会抛出TypeError异常,因为这个方法本质就是通过for循环来进行add()remove(element) element:需要从集合删除值(必须是可hash对象) None 把element从集合中删除
1、如果element本身是不可hash对象,会先抛出TypeError异常
2、如果element本身不在集合中,会抛出KeyError异常discard(element) element:需要从集合删除值 None 把element从集合中删除
1、如果element本身是不可hash对象,会先抛出TypeError异常==(但是传入的是集合的话,就不会抛出这个TypeError异常,没搞懂这个玩意)==
2、如果element本身不在集合中,不会做任何事情,也不会抛出异常(所以比起remove(),更推荐使用这个)pop() 无 Any 从集合中随机删除一个值,并返回这个值
如果集合为空,则会抛出KeyError异常clear() 无 None 清空集合中所有的元素 copy() 无 set 浅拷贝集合,并返回这个浅拷贝的集合 issubset(s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等) bool 判断当前集合是不是参数可迭代对象的子集,返回布尔值
假设a和b都是集合,可以写成 a <= b(表示a是不是b的子集)issuperset(s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等) bool 判断当前集合是不是参数可迭代对象的超集(父集),返回布尔值
假设a和b都是集合,可以写成 a >= b(表示a是不是b的超集)difference(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 set 返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的差集(自己有,别人没有)
假设a和b都是集合,可以写成 a - b(表示a和b的差集,以a为主)difference_update(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 None 与 difference() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留差集中所有的元素 intersection(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 set 返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的交集(自己和别人都有的)
假设a和b都是集合,可以写成 a & b(表示a和b的交集)intersection_update(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 None 与 intersection() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留交集中所有的元素 union(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 set 返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的并集(包含每个集合所有的元素,但交集只出现一次,因为集合会自动去重)
假设a和b都是集合,可以写成 a | b(表示a和b的并集)symmetric_difference(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 set 返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的对称差集(反交集,除了自己和别人都有的其他所有元素)
假设a和b都是集合,可以写成 a ^ b(表示a和b的对称交集(反交集),也即两个集合的并集 减去 两个集合的交集)symmetric_difference_update(*s: iterable) s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值 None 与 symmetric_difference() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留对称差集(反交集,除了自己和别人都有的其他所有元素) isdisjoint(s: iterable) s:可迭代对象,列表、元组等 bool 判断两个集合是否存在交集,如果不存在则返回True,否则返回False
(Return True if two sets have a null intersection.)
更多推荐
Python基本数据类型与方法
发布评论