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实现电子词典
Apr 23 Python
用Python中的字典来处理索引统计的方法
May 05 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
pandas 对group进行聚合的例子
Dec 27 Python
使用python求解二次规划的问题
Feb 29 Python
python json.dumps中文乱码问题解决
Apr 01 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
基于python实现操作redis及消息队列
Aug 27 Python
python 实现弹球游戏的示例代码
Nov 17 Python
Python如何使用循环结构和分支结构
Apr 13 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代码收集表单内容并写入文件的代码
2012/01/29 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
vue webpack打包优化操作技巧
2018/02/22 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
详解Anaconda 的安装教程
2020/09/23 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
销售职业生涯规划范文
2014/03/14 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
五年级上册复习计划
2015/01/19 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Python实现简繁体转换
2021/06/07 Python
POST提交数据常见的四种方式
2022/01/18 HTML / CSS