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 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
python连接MySQL数据库实例分析
May 12 Python
Python中super的用法实例
May 28 Python
RC4文件加密的python实现方法
Jun 30 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
python设置代理和添加镜像源的方法
Feb 14 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
PyTorch的Debug指南
May 07 Python
Python爬虫基础讲解之请求
May 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 文件缓存的性能测试
2010/04/25 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
php取出数组单个值的方法
2018/03/12 PHP
javascript新手语法小结
2008/06/15 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
Python赋值语句后逗号的作用分析
2015/06/08 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
AJAX的全称是什么
2012/11/06 面试题
Python的两道面试题
2013/06/29 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
环卫工作汇报材料
2014/10/28 职场文书
学生个人总结范文
2015/02/15 职场文书
幼师自荐信范文
2015/03/06 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript