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爬取十篇新闻统计TF-IDF
Jan 03 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python创建n行m列数组示例
Dec 02 Python
python3中numpy函数tile的用法详解
Dec 04 Python
Python项目跨域问题解决方案
Jun 22 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
详细介绍python操作RabbitMq
Apr 12 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
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
Javascript Objects详解
2014/09/04 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
旅游活动总结
2014/08/27 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
军人离婚协议书样本
2014/10/21 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
葬礼主持词
2015/07/02 职场文书