慕课网python学习笔记:1.数据结构

1.在列表,集合,字典中筛选数据

  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)
    
  2. 列表解析。

    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

  1. 字典解析

    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)
    
  2. 集合解析

     #将上面的列表转为集合。
     set1 = set(data)
     #集合的模式就是{x,y} 没有冒号
     set2 = {x for x in set1 if x % 2 == 0}
     print(set2)
    

2.给元祖下标命名

  1. 类枚举的方式

    NAME,AGE,SEX,ADDR,TEL = range(5)
    
    student = ('wyq',28,'male','[email protected]','1111111')
    
    print(student[0] ,student[NAME])
    
  2. 标准库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.统计元素出现的频率

  1. 统计列表中每个元素出来的次数

     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排序

  1. 运行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)
    

猜你喜欢

转载自blog.csdn.net/u013169890/article/details/88596743