首页 > 编程语言 > 详细

python cookbook学习笔记

时间:2020-05-31 09:03:21      阅读:60      评论:0      收藏:0      [点我收藏+]

星号表达式

批量匹配可迭代对象

def drop_first_last(grades):
    first, *middle, last = grades
      return avg(middle)

record = (‘ACME‘, 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record

获取最后N个

双向队列

from collections import deque
def search(lines, pattern, history=5):
      previous_lines = deque(maxlen=history)
      for line in lines:
            if pattern in line:
                  yield line, previous_lines
            previous_lines.append(line)

q=deque(max_len=3)      # 不指定max_len表示无限大小
q.append(a)
q.appendleft(a)
a=q.pop()
a=q.popleft()

获取最大/小的N个

import heapq

字典相关

# 1. 防止KeyError,可以自动为将要访问的键创建映射实体,multidict
from collections import defaultdict      
# 2. 保证顺序,迭代顺序为插入时的顺序,对于一个已经存在的键重新赋值也是如此
from collections import OrderedDict      
# 3. 字典运算仅仅作用于键
min_price = min(zip(prices.values(), prices.keys()))          # 现将键值反过来,然后用sorted或者min,注意一对多映射
min(prices, key=lambda k: prices[k])      # 用lambda作为key函数
# 4. 寻找字典的共同点,&/-可以作用于keys()或者items()
# Find keys in common
a.keys() & b.keys() # { ‘x‘, ‘y‘ }
# Find keys in a that are not in b
a.keys() - b.keys() # { ‘z‘ }
# Find (key,value) pairs in common
a.items() & b.items() # { (‘y‘, 2) }
c = {key:a[key] for key in a.keys() - {‘z‘, ‘w‘}}
5. 字典不是hashable的,需要转化为tuple才能使用in等函数
def dedupe(items, key=None):
      seen = set()
      for item in items:
            val = item if key is None else key(item)
            if val not in seen:
                  yield item
                  seen.add(val)
with open(somefile,‘r‘) as f:      # 迭代器适合于文件等对象
      for line in dedupe(f):
6. 创建方法
p1 = {key: value for key, value in prices.items() if value > 200}
p1 = dict((key, value) for key, value in prices.items() if value > 200)

命名切片

SHARES = slice(20, 23)
# a = slice(5, 50, 2) # start/stop/step
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])
# 通过调用切片的indices(size) 方法将它映射到一个确定大小的序列上,避免出现IndexError
s = ‘HelloWorld‘
a.indices(len(s))      # (5, 10, 2)
for i in range(*a.indices(len(s))):
      print(s[i])      # Wr

序列中出现最多的元素

collections.Counter(words).most_common()
word_counts.update(morewords)
# 并且Counter对象可以直接相加

排序

# 字典,按指定键值,itemgetter
from operator import itemgetter
rows_by_fname = sorted(rows, key=itemgetter(‘fname‘))
rows_by_uid = sorted(rows, key=itemgetter(‘fname‘, ‘uid‘))
# 类对象列表,按成员变量,attrgetter
from operator import attrgetter
sorted(users, key=attrgetter(‘user_id‘))
[User(3), User(23), User(99)]

按某个字段将字典列表排序

from operator import itemgetter
from itertools import groupby
# Sort by the desired field first
rows.sort(key=itemgetter(‘date‘))
# Iterate in groups
# groupby要求连续,返回主键与可迭代对象
for date, items in groupby(rows, key=itemgetter(‘date‘)):
      print(date)
      for i in items:
            print(‘ ‘, i)

如果需要支持随机访问,可以使用多值字典

过滤

  1. 列表推导
  2. filter
  3. compress
>>> from itertools import compress
>>> more5 = [n > 5 for n in counts]      # Boolean列表
>>> list(compress(addresses, more5))

命名元组

>>> from collections import namedtuple
>>> Subscriber = namedtuple(‘Subscriber‘, [‘addr‘, ‘joined‘])
>>> sub = Subscriber(‘jonesy@example.com‘, ‘2012-10-19‘)

可以用.操作符,与下标相比意义更加明确,修改用a._replace(dict) 方法

转换的同时计算数据

nums = [1, 2, 3, 4, 5]
s = sum([x * x for x in nums])       # 多一步创建列表
s = sum(x * x for x in nums)

合并多个字典或映射

合并字典,重复的以第一次为准,删除也只对第一个字典有效,本身没有创建字典
ChainMap 对于编程语言中的作用范围变量(比如globals , locals 等)是非常有用的
update或许更加常用,但是他创建了新的字典
sfrom collections import ChainMap

python cookbook学习笔记

原文:https://www.cnblogs.com/lyricode/p/12995958.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!