Python内置容器(2)——字典,迭代器,列表解析

简介:

1.迭代器 iterator

    iter 函数,构造集合。

    next 方法依次返回迭代器的值

In [42]: li

Out[42]: [1, 2, 3, 4, 5]

In [43]: it = iter(li)

In [44]: it.next()

Out[44]: 1

In [45]: it.next()

Out[45]: 2

    当所有的元素都返回完的时候,会抛出一个StopIterator 的异常。

    list,tuple,set 都属于集合。

    for 语句,当将一个列表传递给for 语句的时候,实际上for 语句会将列表转换为迭代器,然后隐示的地执行该迭代器。


    2. 字典 dict

    2.1 定义与初始化 In [46]: d = {}

In [47]: type(d)

Out[47]: dict

In [48]: d = {'a':1,'v':'k'}

In [49]: d

Out[49]: {'a': 1, 'v': 'k'}

在字典中key是不允许重复的,所以字典中的key必须是可hash的对象。

    2.2字典的操作

    2.2.1 keys 将字典的所有key作为一个列表返回In [50]: d

Out[50]: {'a': 1, 'v': 'k'}

In [51]: d.keys()

Out[51]: ['a', 'v']

    2.2.2 iterkeys 将字典的所有key作为一个迭代器返回

In [52]: d.iterkeys()

Out[52]: <dictionary-keyiterator at 0x12ff7e0>

In [53]: it = d.iterkeys()

In [54]: it.next()

Out[54]: 'a'

    2.2.3 values 返回一个列表,该列表是所有元素的值

In [55]: d

Out[55]: {'a': 1, 'v': 'k'}

In [56]: d.values()

Out[56]: [1, 'k']

    2.2.4 items ,返回一个列表,列表中的每个元素是一个元组,元组中的两个值分别是key和value

In [57]: d

Out[57]: {'a': 1, 'v': 'k'}

In [58]: d.items()

Out[58]: [('a', 1), ('v', 'k')]


遍历一个字典:

In [59]: for v in d.values():

....:

print v

....:

1

k

In [60]: for k,v in d.items():

....:

print "%s => %s" % (k,v)

....:

a => 1

v => k


    2.3.5 get ,按照key取值,若存在则返回,否则返回None

In [61]: d.get('a')

Out[61]: 1

还可以给get 传递第二个参数,表示若key不存在,则返回某个值。

In [65]: d.get('xx',100)

Out[65]: 100


    2.2.6 has_key ,判断某个key是否存在

In [63]: d.has_key('a')

Out[63]: True

In [64]: d.has_key('aa')

Out[64]: False


    2.3给字典增加一个键值对:

In [66]: d = {}

In [67]: d['c'] = 1

In [68]: d

Out[68]: {'c': 1}

In [69]: d['xx'] = 100

In [70]: dOut[70]: {'c': 1, 'xx': 100}

In [71]: d['xx'] = 200

In [72]: d

Out[72]: {'c': 1, 'xx': 200}


    2.4update 操作

In [73]: d

Out[73]: {'c': 1, 'xx': 200}

In [74]: d.update({'a':1,'b':2})

In [75]: d

Out[75]: {'a': 1, 'b': 2, 'c': 1, 'xx': 200}


    2.5 python字典为引用传值,如:

In [76]: d

Out[76]: {'a': 1, 'b': 2, 'c': 1, 'xx': 200}

In [77]: d1 = d

In [78]: d1['a'] = 200

In [79]: d1

Out[79]: {'a': 200, 'b': 2, 'c': 1, 'xx': 200}

In [80]: d

Out[80]: {'a': 200, 'b': 2, 'c': 1, 'xx': 200}


    2.6 copy 操作:重新复制一个字典

In [81]: d

Out[81]: {'a': 200, 'b': 2, 'c': 1, 'xx': 200}

In [82]: d2 = d.copy()

In [83]: d2

Out[83]: {'a': 200, 'b': 2, 'c': 1, 'xx': 200}

In [84]: d2['a'] = 300

In [85]: d2

Out[85]: {'a': 300, 'b': 2, 'c': 1, 'xx': 200}

In [86]: d

Out[86]: {'a': 200, 'b': 2, 'c': 1, 'xx': 200}

In [87]: id(d)

Out[87]: 19662176

In [88]: id(d2)

Out[88]: 19501072

In [89]: id(d1)

Out[89]: 19662176


3.列表解析

    [expression for item in iterator] 一个最基本的列表解析,返回一个列表

    在expression 可以使用item 变量


    返回一个迭代器

(expression for item in terator)

In [90]: li = [1,2,3]

In [91]: l = (x+1 for x in li)

In [92]: l

Out[92]: <generator object <genexpr> at 0x12fa730>

In [93]: l.next()

Out[93]: 2In [94]: l.next()

Out[94]: 3


        迭代器是惰性求值,只有用到了才会计算该值,否则不会。列表是先求出所有值的。所以当数据大的时候迭代器有较好的性能。

    带条件的列表解析

[expression for item in iterator if condition] ,当满足条件的时候才会append到列表中,并返回。当变为小括号的时候,就会返回一个迭代器。

In [95]: li

Out[95]: [1, 2, 3]

In [96]: [x for x in li if x % 2 ==0]

Out[96]: [2]


    带多个条件 [expression for item in iterator if conditionX if conditionY]

    带多个迭代器(笛卡尔积与列表解析):[expr for x in IterX for y in IterY] ,类似于两个嵌套的for循环操作

In [99]: [(x,y) for x in [1,2,3] for y in [1,3]]

Out[99]: [(1, 1), (1, 3), (2, 1), (2, 3), (3, 1), (3, 3)]

    列表解析的性能远高于循环语句。



本文转自willis_sun 51CTO博客,原文链接:http://blog.51cto.com/willis/1855129,如需转载请自行联系原作者
相关文章
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
392 1
|
7月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
356 2
|
7月前
|
存储 JSON 数据管理
Python字典:高效数据管理的瑞士军刀
Python字典基于哈希表实现,提供接近O(1)的高效查找,支持增删改查、遍历、合并等丰富操作,广泛应用于计数、缓存、配置管理及JSON处理。其灵活性与性能使其成为数据处理的核心工具。
670 0
|
8月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
312 0
|
7月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
341 0
|
7月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
183 0
|
Python 容器
Python3高级特性(五)之容器(container)
Python3高级特性(五)之容器(container)
|
7月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1001 102
|
7月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
430 104
|
7月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
337 103