Python学习笔记1
记录python学习中有意思的用法及LeetCode刷题遇到的问题
一、命名(namedtuple)
类似C语言中结构体的用法,可以通过定义的下标访问元组中的值
定义一个namedtuple类型的对象,包括name,age,sex,email四种属性
# 为元组中的元素命名,类似C结构体
from collections import namedtuple
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
s = Student('Jim', 16, 'male', 'jim8721@gmail.com')
print(s) # 可通过s.name s.age s.sex访问
二、统计(Counter)
用于统计词频,找出出现次数最多的元素,使用 字典中的计数函数Counter可以直接统计列表中各元素的频数生成字典,most_common(n)依次找出出现最多的n个元素
一个 Counter 是一个 dict 的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数。 Counter 类有点像其他语言中的 bags或multisets。
Counter对象有一个字典接口,如果引用的键没有任何记录,就返回一个0;
# 统计序列中元素出现的频数
# 迭代
from random import randint
data = [randint(0, 20) for _ in range(30)]
d = dict.fromkeys(data, 0)
for x in data:
d[x] += 1
# Counter 统计出现频率最高
from collections import Counter
d2 = Counter(data) # 得到d同样的结果
d_top3 = d2.most_common(3)
# 统计词频
import re
txt = open('test.txt').read()
d3 = Counter(re.split('\W+',txt))
print(d3.most_common(3))
注:python2中使用的xrange在python3中用range代替
Counter VS dic
少
通常字典方法都可用于 Counter 对象,除了下面两个:
fromkeys(iterable):列表转字典并赋值
这个类方法没有在 Counter 中实现。
update([iterable-or-mapping])
从 迭代对象 计数元素或者 从另一个 映射对象 (或计数器) 添加。 像 dict.update() 但是是加上,而不是替换。另外,迭代对象 应该是序列元素,而不是一个 (key, value) 对。
多
计数器对象除了字典方法以外,还提供了三个其他的方法:
elements()
返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于一,elements() 将会忽略它。
c = Counter(a=4, b=2, c=0, d=-2)
sorted(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']
most_common([n])
返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 None,most_common() 将返回计数器中的 所有 元素。 计数值相等的元素按首次出现的顺序排序:
Counter('abracadabra').most_common(3)
[('a', 5), ('b', 2), ('r', 2)]
subtract([iterable-or-mapping])
从 迭代对象 或 映射对象 减去元素。像 dict.update() 但是是减去,而不是替换。输入和输出都可以是0或者负数。
c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
三、字典排序(Sorted)
使得结果根据字典的值排序
# 字典排序
d = {x: randint(60, 100) for x in 'xyzabc'}
# zip()将对象中对应的元素打包成一个个元组
c = zip(d.values(), d.keys())
sorted(c)
# sorted 可以对所有可迭代的对象进行排序操作
sorted(d.items(), key = lambda x: x[1])
zip()
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
注:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
sorted()
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable, key=None, reverse=False)
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。