转载的老板请注明出处:http://blog.youkuaiyun.com/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