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标准异常和异常处理详解
Feb 02 Python
Python读取mp3中ID3信息的方法
Mar 05 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
手写一个python迭代器过程详解
Aug 27 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
2020版Python学习路线图(附学习资料)
Sep 15 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生成短网址方法汇总
2016/07/12 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
python编写分类决策树的代码
2017/12/21 Python
python实现用户答题功能
2018/01/17 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
linux面试题参考答案(11)
2012/05/01 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
小学生秋游活动方案
2014/02/23 职场文书
食品安全汇报材料
2014/08/18 职场文书
绵山导游词
2015/02/05 职场文书
python的html标准库
2022/04/29 Python