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中使用logging模块代替print(logging简明指南)
Jul 09 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
Python3.2模拟实现webqq登录
Feb 15 Python
详解django中自定义标签和过滤器
Jul 03 Python
python中import reload __import__的区别详解
Oct 16 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
django连接oracle时setting 配置方法
Aug 29 Python
python调用接口的4种方式代码实例
Nov 19 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
详解pandas apply 并行处理的几种方法
Feb 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命名空间与自动加载机制的基础介绍
2019/08/25 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python入门之三角函数全解【收藏】
2017/11/08 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
python实现烟花小程序
2019/01/30 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python matplotlib实时画图案例
2020/04/23 Python
中东奢侈品市场:Coveti
2019/05/12 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
应届毕业生自我评价分享
2013/12/15 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
文言文辞职信
2015/02/28 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python