Python中的列表,字典,集合

2018-07-08  本文已影响0人  洽白

鱼龙混杂

列表的最大特性莫过于没有类型之分,只是一些相关元素的简单堆砌. 例如: int可以和str混在一个容器当中.

向列表中添加元素

列表是一个对象,既然是一个对象,就有相应的行为. 其中append , extend, insert可以用来添加元素.

从列表中删除元素

在列表中删除元素, 一种是根据元素名(值)的删除. 一种是根据下标的删除.

列表分片

这个和matlab向量语法很类似. list[start : end : interval]

如果start不写,表示列表最开始, end不写,表示到列表最后. interval不写, 表示间隔为1,即依次输出.

list = range(0,5,1)  ##创建[0,1,2,3,4]
list
    [0,1,2,3,4]
list[1:3]
    [1,2]
list[:3]
[0, 1, 2]
list[:]
    [0, 1, 2, 3, 4]
list[::2]
    [0, 2, 4]
list[::-1]  ##获得反向列表
    [4, 3, 2, 1, 0]

分片拷贝

利用列表分片得到初始化的新列表, 只是原来列表的部分或者全部元素的拷贝. 不会随着源列表的改变而改变.

而直接变量名赋值的新列表,相当于引用. 会随着源列表的变化而变化.例如

list1 = range(1,5)
list2 = list1[:]
list3 = list1
list1.reverse()
list1
    [4, 3, 2, 1]
list2
    [1, 2, 3, 4]
list3
    [4, 3, 2, 1]

列表操作符

大小比较

列表相加

列表乘法

in 和 not in

多维列表

列表也可以像数组一样,实现多维性.

list[x][y]

列表中的成员

列表中有多少小伙伴呢? 不妨让python自己告诉我们:

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']

可以发现,我们之前使用的 remove, append, insert,extend都在里面. 还有几种常用的成员:

关于元组

由于Python的列表过于强大, 所以python的创始人引入了元祖的概念, 关于元组, 和列表最大的区分就是不能随意的修改里面的元素. 必须通过copy的方式,创建一个新的元组.另外, 声明方式也比较特殊.

元组的声明

tuple = (1,2,3)
tuple = 1,2,3
tuple
    (1, 2, 3)

Python中的字典

Python中的字典类似于Java中的HashMap. 是一个通过键值对存储的容器.

创建字典

创建字典的方法有很多种.

直接创建

dic1 = {'a':1,'b':2,'c':3}   ## {} 是字典的标志, key和value通过冒号匹配

通过内置BIF:dict()创建

推荐使用: 第一种, 简洁 明了!

访问字典

字典的访问.

下标访问法

dic = dict(one=1,two=2,three=3)
dic['one']
    1

通过内置方法访问

通过下标访问有时候会有问题, 比如访问一个不存在的key会报错. 但是使用get方法就不会.

dic.keys()
    ['three', 'two', 'one']
dic.values()
    [3, 2, 1]
dic.items()
    [('three', 3), ('two', 2), ('one', 1)]

遍历字典

经常需要遍历一个字典, 有了不同的访问方法,自然有对应的遍历方法. 好在Python有无比强大的for语句. 遍历显得异常简单

for each in dic:
    ### 这个访问的可不是items, 而只是keys!
for each in dic.keys():
    ###
for each in dic.values():
    ###
for each in dic.items():
    ### 这个访问的是item. 每个item是一个元组. each[0]是key. each[1]是value

其他常用操作

清空字典

dic.clear()

拷贝字典

通过标签之间的赋值只是相互传递了一个引用.

cp_dic = dic.copy()

pop和popitem

dic.pop('one')
dic.popitem()

setdefault()

setdefault()方法和get()方法有点相似. 但是setdefault()在字典中找不到相应的键时会自动添加, 而值为None.

dic.setdefault('five')
dic
    {'five': None, 'two': 2, 'one': 1}

update()

利用update()来更新字典.

dic.update(one=11)
dic
    {'three': 3, 'two': 2, 'one': 11}

Python中的集合

集合,在我的世界里, 你就是唯一.

创建集合

set = {2,3,1,5,7,6,1,2,3}
set
    set([1, 2, 3, 5, 6, 7])
list1 = [2,3,1,5,7,6,1,2,3]
set1 = set(list1)  ##只限于python3. python2会报错.
set1 
    {1, 2, 3, 5, 6, 7}
list1 = list(set1)  ##只限于python3. python2会报错.
list1
    [1,2,3,5,6,7]   

访问集合

由于集合中的元素是无序的,多以并不能像序列那样用下标来进行访问, 但是可以使用迭代把集合中的数据一个一个的都取出来.

set1 = {1,2,3,4,3,1,2,0}
for each in set1:
    print(each,end='')
    
    0 1 2 3 4

不可变集合

有时候希望集合中的数据具有稳定性,像元组一样的不能随意的改变.我么可以定义不可变的集合,这里使用frozenset()

set1 = frozenset([1,2,3,1,2,3,4])
set1
    frozenset({1, 2, 3, 4})

上一篇下一篇

猜你喜欢

热点阅读