python中的itertools的使用详解


Posted in Python onJanuary 13, 2020

今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿?。

1.无穷的迭代器

1.1 count(start,[step])

count()接受两个参数

  • start:循环开始的数字
  • step:循环中的间隔
from itertools import count

"""
无穷的迭代器 count()
"""
c = count(0, 2)
v = next(c)
while v < 10:
  v = next(c)
  print(v, end=',')

1.2 cycle()

cycle就是一while True,无限循环里面的数字。

"""
无穷迭代器 cycle()
"""
from itertools import cycle

c = cycle('ABCD')
for i in range(10):
  print(next(c), end=',')

1.3 repeat(elem,[n])

重复迭代elem,n次

"""
无穷迭代器 repeat()
"""
from itertools import repeat

r = repeat(1, 3)
for i in range(3):
  print(next(r), end=',')

2. 迭代器

2.1 accumulate(p,[func])

使用func的函数对迭代对象p进行累积。

"""
迭代器 accumulate()
"""
from itertools import accumulate

test_list = [i for i in range(1, 11)]
for i in accumulate(test_list): # 默认是operator.add
  print(i, end=',')
print()
for i in accumulate(test_list, lambda x, y: x * y): # operator.mul
  print(i, end=',')

2.2 chain()

chain()中可以放多个迭代对象,然后一一迭代出来。

"""
迭代器 chain()
"""
from itertools import chain

ch = chain([1, 2, 3], {4: 4, 5: 5}, {6, 7, 8}, (9,), [10, [11, 12]])
for i in ch:
  print(i)

2.3 chain.from_iterable()

跟chain不同的地方在于:

  • chain: 可以接受多个迭代对象
  • chain.from_iterable():可以接受一个可以产生迭代对象的迭代器
"""
迭代器 chain.from_iterable()
"""
def gen_iterables():
  for i in range(10):
    yield range(i)

for i in chain.from_iterable(gen_iterables()):
  print(i)

2.4 compress(data,selectors)

这是就是看下这个就知道了s是selectors中的元素。
(d[0] if s[0]), (d[1] if s[1]), ...

"""
迭代器 compress
"""
from itertools import compress

print(list(compress(['A', 'B', 'C', 'D'], [0, 1, 1, 1])))

2.5 dropwhile(pred,seq)

循环开始的条件是,直到遇到第一次不满足pred条件的情况,才开始遍历。

"""
迭代器 dropwhile()
"""
from itertools import dropwhile

l = [1, 7, 6, 3, 8, 2, 10]
print(list(dropwhile(lambda x: x < 3, l)))

2.6 groupby

这个感觉挺有意思的,有点像sql中的group_by。可以对字符串,列表等进行分组。

返回键和,组里的内容

from itertools import groupby

# 对字符串进行分组
for k, g in groupby('11111234567'):
  print(k, list(g))
d = {1: 1, 2: 2, 3: 2}
# 按照字典value来进行分组
for k, g in groupby(d, lambda x: d.get(x)):
  print(k, list(g))

2.7 islice
这个就是对迭代对象进行切割,不支持负数,有点像range(1,10,2)这种

from itertools import islice
print(list(islice('ABCDEFG', 2,3, None)))

2.8 zip_longest

这个和zip很像,不同地方在于:

  • zip结束取决于里面最短的迭代对象
  • zip_longest结束取决于里面最长的迭代对象
from itertools import zip_longest

for x,y in zip_longest([1,2,3],[1,2]):
  print(x,y)
for x,y in zip([1,2,3],[1,2]):
  print(x,y)

排列组合迭代器

3.1 product

相当于 嵌套的for

“”"
排列组合迭代器 product 嵌套的for
“”"
from itertools import product
for i,j in product([1,2,3],[4,5]):
print(i,j

3.2 permutations

全排列,比如输出123的全部情况。(1,2,3),(1,3,2)…

from itertools import permutations
print(list(permutations('123')))

3.3 combinations(p,r)

从p中找出所有长度为r的排列情况… 有顺序

from itertools import combinations
print(list(combinations([1,2,3],2)))

3.4 combinations_with_replacement()

从p中找出所有长度为r的排列情况,有顺序,但包括自身就是会重复的意思。

  • combinations_with_replacement(‘ABCD', 2)
  • AA AB AC AD BB BC BD CC CD DD

了解是了解了,就是用的时候不知道能不能想起来…

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
基于python3实现倒叙字符串
Feb 18 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
在keras里实现自定义上采样层
Jun 28 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
python3读取csv文件任意行列代码实例
Jan 13 #Python
pytorch程序异常后删除占用的显存操作
Jan 13 #Python
Python跑循环时内存泄露的解决方法
Jan 13 #Python
PyTorch使用cpu加载模型运算方式
Jan 13 #Python
Python如何读取文件中图片格式
Jan 13 #Python
详解python破解zip文件密码的方法
Jan 13 #Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 #Python
You might like
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP编写简单的App接口
2016/08/28 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
python实现异步回调机制代码分享
2014/01/10 Python
python通过线程实现定时器timer的方法
2015/03/16 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
eBay加拿大站:eBay.ca
2019/06/20 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
运动会班级口号
2014/06/09 职场文书
早读课迟到检讨书
2014/09/25 职场文书
医院领导班子整改方案
2014/10/01 职场文书
美容院合作经营协议书
2014/10/10 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
董事会决议范本
2015/07/01 职场文书
医院病假条范文
2015/08/17 职场文书