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文件操作类操作实例详解
Jul 11 Python
Python使用MD5加密字符串示例
Aug 22 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
一文读懂Python 枚举
Aug 25 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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学习之PHP表达式
2006/10/09 PHP
php在线生成ico文件的代码
2007/10/09 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
Python编程中的异常处理教程
2015/08/21 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python决策树分类算法学习
2017/12/22 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python识别html主要文本框过程解析
2020/02/18 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
农民工工资承诺书范文
2014/03/31 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
信仰观后感
2015/06/03 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL