自学Python之Python基础:(五)Python数据结构常用操作

本文介绍了Python数据结构的操作,包括使用filter和列表解析在字典、列表、集合中筛选数据,统计列表元素频次,对容器排序,以及利用zip、sorted、map和reduce函数进行各种高级操作。同时还展示了如何找出字典的公共键和保持字典有序,以及实现对象状态缓存。
摘要由CSDN通过智能技术生成

转载的老板请注明出处:http://blog.csdn.net/cc_xz/article/details/78691928万分感谢!

在本篇中,你将了解到:
1.如何在字典、列表、集合中筛选数据。
2.统计列表中元素的出现频次。
3.对容器中的值进行排序。
4.字典的多种应用方法。


列表, 字典, 集合中根据条件筛选数据:
请思考:

  过滤掉列表:list = [3,9,-1,10,20,-2]中的负数
  筛选出字典:{
  'LiLei':79,'Jim':88,'Lucy':92}中值高于90的项
  筛选出集合:{
  77,89,32,20}中能被3整除的元素

最简单的方法是依次迭代列表、字典、集合中的每个项,然后使用条件判断,符合添加,则将值添加到新列表中,如果不符合,则继续迭代。例如:

oldList = [3,9,-1,10,20,-2]
newList = []
for value in oldList:
   if value < 0 :
      newList.append(value)
print(newList)

输出结果为:

[-1, -2]

但除上述代码外,还有更简洁高效的方法。例如,列表可以使用filter函数和列表解析。字典和集合可以分别使用字典解析和集合解析。


使用列表解析筛选列表:

from random import randint
import timeit

"""
列表推导式:
@randint 用于生成随机数,起始范围是-10,结束是10。
@range 生成从0-9的数,用于占位操作。
此段代码的作用是:生成的列表有10个元素,而元素的值是通过randint生成的随机数。
"""
list = [randint(-10, 10) for value in range(10)]
print(list)

"""
首先将list中的值通过for遍历逐个取出,赋值给第二个x,然后通过if判断,如果结果为True,则将x(第一个)的值放入列表中,如果不为真,则继续遍历、判断。
"""
result = [x for x in list if x >= 0]
print(result)

"""
timeit函数:
此函数用于返回推导式执行的时间,第一个参数为执行的推导式。但此推导式中使用到了外部包,而导入外部包的代码在setup=参数中使用字符串表示。
number表示代码执行的次数。当timeit函数执行完毕后,会返回一个值,是执行代码的耗时,以秒为单位。
"""
print(timeit.timeit('[randint(-10, 10) for value in range(10)]',setup='from random import randint' ,number=100000))

输出结果为:

[5, -7, -4, -10, 4, -4, -3, -4, 10, 9]
[5, 4, 10, 9]
1.9519859145993275

使用字典解析筛选字典:

from random import randint

"""
同列表生成式不同的是,在最前端,使用通过range()生成的从1-20的值作为字典的Key,
而Value使用randint()生成的随机数。在将Key和Value放入字典中时,直接使用了x:randint()。
"""
dict = {x:randint(60,100) for x in range(1,20)}
print(dict)

"""
首先使用dict.items()将字典中所有的key和value都取出,然后判断value的值,如果大于等于90,
则将当前的key和value放入新字典中,再继续执行循环。
"""
dict01 = {k:v for k,v in dict.items() if v >= 90}
print(dict01)

输出结果为:

{
   1: 60, 2: 95, 3: 88, 4: 96, 5: 80, 6: 98, 7: 81, 8: 84, 9: 92, 10: 74, 11: 100, 12: 99, 13: 78, 14: 97, 15: 83, 16: 87, 17: 71, 18: 89, 19: 85}
{
   2: 95, 4: 96, 6: 98, 9: 92, 11: 100, 12: 99, 14: 97} 


使用集合解析筛选集合:

from random import randint
import timeit

set = {randint(1,100) for x in range(10)}
print(set)

set01 = {x for x in set if x % 3 == 0}
print(set01)

输出结果为:

{
   4, 75, 78, 81, 49, 20, 21, 85, 30}
{
   81, 75, 21, 78, 30}


使用列表解析筛选列表:

myList = ['cangL',21,'男','754003@qq.com']

在上述代码中,如果我们希望访问某个元素,则需要使用index来访问,但在代码中大规模的使用数字为index,则会导致程序的可读性降低。第一种解决方案如下:

myList = ['cangL',21,'男','754003@qq.com']
NAME,AGE,SEX,EMAIL = range(4)
print(myList[EMAIL])

输出结果为:

754003@qq.com


统计出出现频度:
统计随机序列中的频次 :

from random import randint
from collections import Coun
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值