Python学习笔记1

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})

python-Counter

三、字典排序(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 升序(默认)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值