三:常见数据类型
常见数据类型
基本数据类型
常见复合数据类型:tuple list set dict
元组tuple
dir(tuple) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
可以看到所有的方法,内置方法和成员方法,一切皆对象,内置方法是对类的高度定制,有不同的触发机制,不需要你主动调用,这里先不看。
tuple是有序不可变数据类型,成员方法只有count()和index(),但是他是有序的,count()对一个元素进行计数,index()输出元素首次出现位置的索引。
因为有序不可变,常用在函数的参数在函数调用时使用,保证内容没有被所调用的函数改变。
列表list
list(iterable=(), /) | | Built-in mutable sequence.
/是python3.8之后的新特性,表示左边的参数都是位置参数
将一个可迭代的对象传入,创建得到列表,list() list((1,2,3)),l=[1,2,3]等方式创建列表对象。
dir(list) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
count和index是重复的。
class list(object) | list(iterable=(), /) | append(self, object, /) | Append object to the end of the list. | | clear(self, /) | Remove all items from list. | | copy(self, /) | Return a shallow copy of the list. | | count(self, value, /) | Return number of occurrences of value. | | extend(self, iterable, /) | Extend list by appending elements from the iterable. | | index(self, value, start=0, stop=2147483647, /) | Return first index of value. | | Raises ValueError if the value is not present. | | insert(self, index, object, /) | Insert object before index. | | pop(self, index=-1, /) | Remove and return item at index (default last). | | Raises IndexError if list is empty or index is out of range. | | remove(self, value, /) | Remove first occurrence of value. | | Raises ValueError if the value is not present. | | reverse(self, /) | Reverse *IN PLACE*. | | sort(self, /, *, key=None, reverse=False)
其他成员方法9个,3增,3减,反转拷贝排序,2公共
1-append:在列表末尾索引添加元素
2-insert:在指定的索引前面添加元素
3-extend:a.extend(b)将a列表中的所有元素,按照顺序添加到b列表中
4-remove:删除指定元素,如果不存在就会报错没有异常处理的话就崩了,因此不要轻易使用,使用也在前面加if判断,if value in mylist:,in成员运算符就会去调用内置的__contains__方法。
5-pop:删除并返回最后一个元素
6-clear:清空列表
7-sort:将列表中的元素按顺序排列,
8-resverse:翻转列表,但是没有排序,只是将初始顺序反过来。
sort和reverse都是在原列表的中进行的修改,并没有开新的内存
9-copy:浅拷贝,只拷贝外壳,内部的索引还是指向相同的数据内存,数据还是共享的。绳子变了,但是2条绳还是牵着一条狗。
reversed:是一个内置方法,是在原列表的基础上返回了一个新的列表,原列表的不变的。
改和查直接用索引就可以了。
字典dict
3.6版本之后的字典都是有序的。
创建字典的对象5种
1-| dict() -> new empty dictionary
d = dict()
2-| dict(mapping) -> new dictionary initialized from a mapping object's
| (key, value) pairs,将所有的kv放入一个元组,然后用一个容器类型把他们装在一起,可以是(),可以是[]
d = dict([(1,2), (3,4)])
3-| dict(iterable) -> new dictionary initialized as if via:
| d = {}
| for k, v in iterable:
| d[k] = v
d = dict({1:2, 3:4})
4-| dict(**kwargs) -> new dictionary initialized with the name=value pairs
| in the keyword argument list. For example: dict(one=1, two=2)
d = dict(a=2, c=4)
5——
d = {‘a’: 1, ‘b’:2, ‘c’: (1,2), ‘d’: [None, True]}
dir(dict) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
d[key]可以获取到value的原因就是字典里面的实现了__xxxitem__系列的方法。其他对象同样可以,只要实现了此类内置方法。
成员方法18个
1-update将一个字典的元素挨个添加到当前字典
d1.update(d2)
2-pop(key),删除指定key,没有则报错,因此删之前要用成员运算符判断
3-popitem()删除最后一组key value对,因为已经有序了,3.6版本之前则是随机删除一堆kv并返回
改则直接d[key]=value进行修改
4-clear清空字典
5-get(key,default=None)获取key对应的value,没有就返回Value,或者更改默认值,没有不会报错,返回的是default值
6-items
7-keys
8-values三者都是返回了一个可迭代对象,节省内存
9-copy()浅拷贝一个字典
10-setdefault(key,value)获取key对应的value,如果有则获取,没有这个key则将这个key value装入字典
11-fromkyes(),将一个可迭代对象传入,然后第三个参数放入value,所有的key都对应相同的value,相当于给一个空字典赋值。
set集合
>dir(set) ['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeo f__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
1元素必须是不可变类型,因为可变类型不能进行hash运算
2里面的元素不可重复,用到的就是__hash__和__eq__方法,先用hash进行散列,然后eq判断值
s = set()
s = set(‘hello’) => set([‘h’,’e’,’l’,’o’])
s = set([1,2,3,4]) => set([1,2,3,4])
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集(项在t戒s中,但不会同时出现在二者中)
常用成员方法
1-add()添加元素到集合中
2-update()将一个set中的元素添加到一个集合中
3-clear()清空set
4-copy()浅拷贝
5-pop删除最后一个元素,如果set是空的会报错
6-remove删除指定元素,如果没有此元素就会报错
7-discard()删除一个元素,没有元素或者集合是空也不会报错
集合运算
set1&set2交集
set1|set2并集
set1-set2差集
set1^set2亦或,获取只在一个集合出现的元素,即并集-交集的结果
遍历容器
复合数据类型都是可迭代的
用for遍历,第一步拿到迭代器,第二步调用next()直至抛出stopIteration异常,并完美的兜住处理掉异常
还涉及到切片,range

浙公网安备 33010602011771号