1.在列表,集合,字典中筛选数据
-
常用方法:遍历
data = [10,30,-1,-5,2,-12,-9,0,11,23] res = [] for i in data: if i > 0: res.append(i) print(res)
-
列表解析。
from random import randint #生成10个随机数, 范围在-10到10之间 data = [ randint(-10,10) for x in range(10) ] filter_data = filter(lambda x: x >=0 , data) filter_data2 = [x for x in data if x >= 0] #数据比对 print(data) print(list(filter_data)) print(filter_data2) #[4, -7, -8, 9, 9, 10, 0, 9, -7, -3] #[4, 9, 9, 10, 0, 9] #[4, 9, 9, 10, 0, 9]
range方法返回的是一个list对象,它需要开辟专门的空间保存序列中所有的元素。
xrange方法返回的是xrange对象,它是一个序列对象,但并不保存序列中的元素。其实现方法与本文介绍的MyRange类型类似。
python2.x用xrange, python3.x用range
-
字典解析
from random import randint from pprint import pprint dict1 = {id:randint(60,100) for id in range(1,21)} pprint(dict1) #遍历items,可以得到k,v k:v 就是字典模式。 dict2 = {k:v for k, v in dict1.items() if v > 90} pprint(dict2)
-
集合解析
#将上面的列表转为集合。 set1 = set(data) #集合的模式就是{x,y} 没有冒号 set2 = {x for x in set1 if x % 2 == 0} print(set2)
2.给元祖下标命名
-
类枚举的方式
NAME,AGE,SEX,ADDR,TEL = range(5) student = ('wyq',28,'male','[email protected]','1111111') print(student[0] ,student[NAME])
-
标准库collections中的namedtuple
from collections import namedtuple Student = namedtuple('Student',['name','age','sex','addr','tel']) s = Student('wyq',28,'male','[email protected]','1111111') print(s) print(s.name)
namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
Returns a new subclass of tuple with named fields.
namedtuple 类似一个工厂。
此时通过属性的方法来访问
3.统计元素出现的频率
-
统计列表中每个元素出来的次数
from random import randint #创建30个随机数, 数据范围在(0,20) datas = [ randint(0,20) for _ in range(30) ] print(datas) #统计元素频率,最后肯定会返回字典。 #创建一个空dict,他的key肯定是datas里的元素 dict1 = dict.fromkeys(datas,0) print(dict1) for x in datas: dict1[x] += 1 print(dict1) 结果: [0, 11, 5, 11, 11, 19, 17, 19, 20, 10, 0, 8, 1, 11, 2, 8, 5, 19, 20, 17, 6, 18, 2, 8, 3, 11, 8, 9, 18, 15] {0: 0, 11: 0, 5: 0, 19: 0, 17: 0, 20: 0, 10: 0, 8: 0, 1: 0, 2: 0, 6: 0, 18: 0, 3: 0, 9: 0, 15: 0} {0: 2, 11: 5, 5: 2, 19: 3, 17: 2, 20: 2, 10: 1, 8: 4, 1: 1, 2: 2, 6: 1, 18: 2, 3: 1, 9: 1, 15: 1}
fromkeys(iterable, value=None, /) method of builtins.type instance
Returns a new dict with keys from iterable and values equal to value.
2.使用标准库collections中的Counter
from collections import Counter
c1 = Counter(datas)
print(c1)
c1.most_common(10)
Counter 是一个有助于 hashable 对象计数的 dict 子类。它是一个无序的集合,其中 hashable对象的元素存储为字典的键,它们的计数存储为字典的值,计数可以为任意整数,包括零和负数。
我们可以这样查看 Counter 的帮助信息,事实上这些信息来源于 Counter
的文档字符串(collections.Counter.doc)。elements() 方法,其返回的序列中,依照计数重复元素相同次数,元素顺序是无序的。
most_common() 方法返回最常见的元素及其计数,顺序为最常见到最少。
2.统计文件中单词出现的频率
import re
from collections import Counter
#读取文件
txt = open("aa.log").read()
print(txt)
list1 = re.split('\W+',txt)
print(list1)
c2 = Counter(list1)
print(c2.most_common(3))
4.对dict中的value排序
-
运行sorted(iter对象, key=)
from random import randint datas = {k:randint(60,90) for k in 'zjabcefx'} print(datas) #直接用sorted 是按照key进行排序的。 print(sorted(datas)) # 在这里我们可以将key,value组成一个元祖, # datas.keys() datas.values() zip()组合成一个列表 lista = zip(datas.values(),datas.keys()) print(list(lista)) #但是结果是空的。 print(sorted(lista)) #此时换种方法, print(datas.items()) aa = sorted(datas.items(),key=lambda x:x[1]) print(aa)