跳转至

数据类型内置方法

哪些方法是有返回值的,哪些是返回None?(可变数据结构的方法都返回None?)

哪些方法不改变原对象,哪些改变,规则是什么?

字符串

>>>  dir(str)

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 

'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 

'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 

'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
# 查找子串
_str.find(sub_str)  # 返回字符串的索引下标,如果不在返回-1
  • 校验
# 判断字符串是否以xxx开头/结尾,可以加索引范围,默认从0~-1
_str.startswith(xxx, beg=0, end=len(string))
_str.endswith(xxx, beg=0, end=len(string))

_str.isdigit()  # 是否全由数字组成
_str.isalpha()  # 是否全是字母组成

_str.isupper()  # 是否全大写
_str.islower()  # 是否全小写
_str.istitle()  # 是否标题样式
  • 处理
_str.upper()  # 变为全大写
_str.lower()  # 变为全小写
_str.capitalize()  # 将首字母大写
_str.title()  # 标题样式,即所有单词首字母大写
_str.swapcase()  # 反转大小写,即将大小变小写,小写变大写

_str.strip()  # 去除两端的空白,也可以去除指定字符,下同
_str.lstrip()  # 去除左边的空白
_str.rstrip()  # 去除右边的空白
"""
"IAWAI".strip("IA")  # "W"
"""

# 在指定字符处将字符串分割,组成列表返回
# 指定字符不存在则返回整个字符串
# 指定为空时默认在<空格>\r\n\f\t\v等地方分割
_str.split("x", [分割次数])
"""
"a,b,c,d".split(",", 2)  # ["a", "b", "c,d"]
"""

# 把字符串中的“a”替换为“b”
# 注意:不改变原字符串
_str.replace("a", "b", [替换个数])
"""
tel="12345678888"
tel.replace(tel[3:7], "*"*5)  # '123*****8888'
"""

# 可以拼接序列的每一个元素
# 序列为list或tuple时元素必须为字符串类型
_str.join(序列)
"""
"+".join("123")  # "1+2+3"
"".join(["a","b","c"])  # "abc"  # 字符串转用list(_str)转换为列表后可以再用join转换回字符串
"""
  • 格式化
x = "c"

# 方式1:%s、%d
_str = "ab%sde" %x

# 方式2:{}.format()
_str = "ab{}de".format("a")
_str = "ab{0}de{1}".format("a", "b")  # 索引指定
_str = "ab{k1}de{k2}".format("k1"="a", "k2"="b")  # 关键字指定,也可以**{"k1":1, "k2":2}

# 方式3:f'{}'
f'ab{x}de'

tuple

>>>  dir(tuple)

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 

'index', 'count']

list

>>>  dir(list)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 

'index', 'count', 'sort', 'reverse', 

'append', 'extend', 'insert', 

'pop', 'remove', 

'clear', 'copy']
# 列表自带排序方法(原对象会被改变)
_list.sort()
_list.sort(reverse=True)  # 倒序
_list.sort(key=len)  # 按字符长度排

# 内置函数sorted()排序,元素类型要一致可排,否则报错(原对象不变)
sorted(_list)  # 正序
sorted(_list, reverse=True)  # 倒序

set

  • dir(set)
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 

'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'symmetric_difference_update', 'union', 

'update', 

'add', 

'pop', 'remove', 

'clear', 'copy']

dict

>>>  dir(dict)

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 

'fromkeys', 

'update', 

'get', 'setdefault', 'items', 'keys',  'values', 

'pop', 'popitem', 

'clear', 'copy']
_dict[key]  # 若key不存在,则报错

_dict.get(key, "unkown")  # 若key不存在,则默认返回None(可自定义)

_dict.setdefault(key, value) # 若key不存在,则默认将{key:default/value}添加到字典中

# 以下都不接受参数
_dict.items()  # dict_items([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
_dict.keys()  # dict_keys(['k1', 'k2', 'k3'])
_dict.values()  # dict_values(['v1', 'v2', 'v3'])

python3.7开始dict是有序的

sorted(_dict.items(), key=lambda x:x[0])  # dict按key排:[('a', 3), ('b', 1), ('c', 2)]
sorted(_dict.items(), key=lambda x:x[1])  # dcit按value排:[('b', 1), ('c', 2), ('a', 3)]

可改变数据类型的操作

清空

_list.clear()
_set.clear()
_dict.clear()

del _list[:]

  • list
_list.append(x)  # x被当作一个整体,添加到末尾

_list.extend(x)  # x必须为可迭代的,会被当作一组,组中元素按序添加到末尾

_list.insert(index, x)  # x被当作一个整体,插入到指定位置

_list[len(_list):] = x  # 末尾插入
  • set
_set.add(key)
  • dict
_dict["new_key"] = new_value

.pop()方法在三种数据类型中用法不太一致,需要参数,不需要参数,指定删除,随机删除,删除末位……擦,真特么乱。

不管怎么删除都会返回被删除的元素。而remove不会。

为什么呢?

因为字典带有key,所以可以带参数(且必须带参数,为什么?),按key删除

而list可以下标,可以带参数下标来删除,如果不带就删除末位

set既没有key也不可下标,所以不能带参数,而且还因为无序,不带参数就随机删除

那么.remove()呢,list和set都是移除指定元素,dict没有

防止要删除的元素不存在报错,加个默认返回值参数.pop(x, None)

  • list
_list.pop()  # 删除末位,并返回被删除的值
_list.pop(index)  # 删除指定位置

_list.remove(x)  # 删除指定元素(如有重复,删除第一个)
  • set
_set.pop()  # 随机删除,并返回被删除的值

_set.remove(x)  # 删除指定元素
  • dict
_dict.pop(key)  # 删除指定key,并返回被删除key对应的值
_dict.popitem()  # 随机删除(但其实删除的是末位,字典现在是有序的),并返回被删除的键值对
  • del方式删除,释放内存
del _tuple
del _list
del _set
del _dict

del _list[m:n]  # 删除list切片

del _dict[key]  # 删除dict指定key

  • list
# 修改指定位置元素
_list[-1] = x

_list[m:m] = x  # 还可以用切片的方式替换
  • dict
# 同增加
_dict["old_key"] = new_value

最后更新: 2022-07-15