Loading

三:常见数据类型

常见数据类型

基本数据类型

常见复合数据类型: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

 

posted @ 2019-12-07 16:28  浅忆尘  阅读(74)  评论(0)    收藏  举报