每天坚持学习一点,进行数据复盘,学习就是不一样
python高级编程,列表字典集合相关的数据筛选
#先看看第一个列表筛选 2017 9 16 高效python编程的一个案例:from random import randint
data = [randint(-10, 10) for _ in random(10)] # 这行代码就是随机生成10从-10到10的随机
数组成的列表
下面通过一个筛选出 大于0的数字
screen = [x for x in data if x >= 0]
就可以得到相关的筛选数据出来
还有一个方式就是 filter
screen = filter(lambda x: x>=0, data)
也可以筛选出相关的数据 但是注意这个是返回的可迭代的对象,但是效率没有上面列表解析快
下面我们针对 字典进行相关的数据筛选吧
首先创建一个 20个人的 60-100分的 一个字典对象
data = {x: randint(60, 100) for x in random(1, 21)}
上面就创建了这个对象 x 对应的后面 for表达式里面的随机数作为key 后面是 value
下面我们筛选出大于90分的学生编号
screen = {key:value for key, value in data.items() if value > 90}
这里就筛选出来了
下面通过上面的列表 data 进行 集合 set的筛选
newData = set(data)
screen = {x for x in newData if x >= 0}
上面这个也可以得到相关的一些数据 if后面就是条件表达式.
# 下面我们看下如果是一个固定的数据 那么我们肯定首选元祖
person = ('姬寅', 32, '男', '全栈编程与讲师', '148301206@qq.com')
# 通过上面这个代码 我们就定义了 一个元祖 但是知道元祖的都明白如果想要访问
# 都是要通过索引index来获取的,有没有更好的语义化的访问呢下面通过一个方式访问
NAME, AGE, SEX, OCCUPATION, EMAIL = range(5)
print(person[NAME])
# 下面也可以通过一个内置的方法进行更换元祖
from collections import namedtuple
person = namedtuple('person', ['name', 'age', 'sex', 'occupation', 'email'])
# person = person('姬寅', 32, '男', '全栈编程与讲师', '148301206@qq.com')
# print(person.name)
# 也可以通过参数方式进行定义
person = person(name='姬寅', age=32, sex='男', occupation='全栈编程与讲师', email='148301206@qq.com')
print(person.name)
# 判断是不是谁的子类 用下面的方式
print(isinstance(person, tuple))
# 下面统计随机出现频率最多的三个元素
# 创建一个随机序列
data = [randint(0, 20) for _ in range(20)]
# 创建一个字典 将data作为key 0作为默认的value
screen = dict.fromkeys(data, 0)
for x in data:
screen[x] += 1
# 这个样子得到的screen就得到了出现次数
# 但是要得到相关的出现频率最多的 可以通过下面这个函数
from collections import Counter
screen2 = Counter(data)
print(screen2.most_common(3))下面我们在通过一个案例 就是一篇文章英文单词出现频率最多的3个
首先通过正则表达式 和 读入一个文件 案例如下
import re
text = open('文件.txt').read()
text2 = Counter(re.split('\w+', text)) # 以非字母的进行分割
print(text2.most_common(3)) # 就得到了想要的答案
# 下面通过一个案例 如何通过字典的中值的大小 进行排序
students = {x: randint(60, 100) for x in 'abcdef'}
# 如果直接使用排序函数 sorted 的话 只能返回键
print(sorted(students))
# 下面通过zip函数 对上面的字典进行转换为 元祖
newScreen = zip(students.itervalues(), students.iterkeys())
sorted(newScreen )
# 还有一个方式不用zip方法 用sorted 的key 方法
sorted(students.items(), key= lambad x : x[1])
# 也可以和上面的效果一样。