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获取Linux系统的各种信息
Jul 10 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
python opencv 图像尺寸变换方法
Apr 02 Python
Python反射和内置方法重写操作详解
Aug 27 Python
Python的log日志功能及设置方法
Jul 11 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
pandas中DataFrame重置索引的几种方法
May 24 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中的正规表达式(二)
2006/10/09 PHP
Laravel 5 学习笔记
2015/03/06 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
javascript的BOM汇总
2015/07/16 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
python实现装饰器、描述符
2018/02/28 Python
PyCharm代码格式调整方法
2018/05/23 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
Python-接口开发入门解析
2019/08/01 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
招标保密承诺书
2015/01/20 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
详解Django的MVT设计模式
2021/04/29 Python
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android