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插入排序算法的实现代码
Nov 21 Python
python字符串对其居中显示的方法
Jul 11 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
Python 2.7中文显示与处理方法
Jul 16 Python
python绘制BA无标度网络示例代码
Nov 21 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
python识别验证码的思路及解决方案
Sep 13 Python
Django限制API访问频率常用方法解析
Oct 12 Python
如何用用Python将地址标记在地图上
Feb 07 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 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 flock 文件锁详细介绍
2012/12/29 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python Django 命名空间模式的实现
2019/08/09 Python
用python读取xlsx文件
2020/12/17 Python
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
探亲邀请信范文
2014/01/30 职场文书
学校端午节活动方案
2014/08/23 职场文书
人民调解协议书范本
2014/10/11 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
python中tkinter复选框使用操作
2021/11/11 Python