Python基础学习——序列、集合和字典(下篇)

1.字典的创建和初始化

        字典是一种映射,字典中的每个元素都是键(key):值(value)对的形式。键的取值必须唯一且必须是可哈希类型的对象;但对值的取值没有任何限制。

        字典主要应用于做数据的快速检索。

        创建:使用一对大括号{ }或者dict函数创建。({ }可创建出空字典)

        初始化:

d.fromkeys(seq,[value])

d1={}.fromkeys(seq,[value])
d1=dict().fromkeys(seq,[value])

seq:包含了字典所有键名的序列

value:可选参数,指定了各元素的初始值,默认情况下被赋值为None。

 plus:如果使用的字典对象中原来已经有其它元素,则调用fromkeys方法后原有的元素会被清除。

2.字典元素的修改、插入和删除

修改与插入:

        1)如果插入的值对应的键在字典中存在,则将在该键对应的值位置做做修改;如果不存在,则会在字典中插入一个新的元素。

d1['key1']='123456'

        2)也可以使用字典中update方法。

d.update(d1)
d.update(key1=value1,key2=value2...)

删除:

        

del d[key]删除某个元素。
d.pop(key,[default])删除key对应的元素,如果key不存在,则返回default。

 

3.字典的浅拷贝和深拷贝

浅拷贝d.copy(d1)
深拷贝d.deepcopy(d1)

        深拷贝可以使得原有字典对象和生成的字典对象对应不同的内存空间,而且使得两个对象中的可变类型元素对应不同的内存空间,从而使得两个字典对象完全独立。

4.判断字典中是否存在键及拼接两个字典

判断是否存在键

d.get(key,default=None)获取key对应的值,如果key不存在,则返回default。
in使用方法:if 'key' in d

拼接两个字典

d.dict(d1,**d2)

or

d=d1.copy()
d.update(d2)

5.字典中的其它常用操作

d.len ()计算字典中元素的个数
d.clear()清楚字典所有元素
d.keys()获取字典中的键集合
d.values()获取字典中的值集合
d.items()获取字典中的元素数组

items方法返回的是一个按键值方式遍历的对象。

如果直接在字典上做遍历,则每次只能获取到一个元素的键,然后再通过键去获取该元素的值。 

6.切片和列表生成表达式

        切片:截取序列中的部分元素。

l1=list(range(0,20))
l3=l2[begin:end:step]

begin end step 若为正数,则从左往右数;反之,则从右往左数。

        列表生成表达式:快捷地生成列表对象

ls=[x*x for x in range(10)]

plus:列表生成表达式也支持多层循环嵌套的形式。结果可以通过排列组合得出。

7.生成器

        当一个列表含有大量元素时,如果一次性生成这个列表,将占用大量空间;而使用生成器,可以根据需要进行计算并获取列表中某个元素的值。

g=(x*x for x in range(10))

        如果生成元素的方法比较复杂,还可以借助yield关键字利用函数实现生成器的功能。

def faclist(n):
    result=1
    for i in range(2,n+1):
        yield result
        result*=i
    for i in faclist(10):
        print(i,end=' ')

        遇到yield即停止执行并返回result,下次执行时继续从此处开始。 

 

8.迭代器

        可迭代对象:可以直接使用for循环遍历的对象。

        迭代器:可以通过next函数不断获取下一个值的可迭代对象。

        可以通过isinstance方法判断一个对象是否为可迭代对象或迭代器。

对于可迭代对象,可以通过iter函数得到迭代器。

ls=[1,2,3]
it=iter(ls)

通过next获取下一个元素时,如果越界,则会引发StopIteration异常。

因此我们可以定义一个类,自定义__next__和__iter__ 这两个内置方法,实现自定义迭代器。

from collections.abc import Iterator
class Faclist:
 def __init__(self):
        self.n=1
        self.fac=1
 def __next__(self):
        self.fac*=sefl.n
        self.n+=1
        return self.fac
 def __iter__(self):
        return self

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值