python基础——itertools模块

itertools模块提供的函数大多是返回一个迭代器,以下介绍几个常用的函数

count:无限迭代器,接受两个参数,第一个参数为起始位置,第二个参数为步长
import count

for i in itertools.count()# 不指定参数默认是从0开始,步长为1
	print(i)
	
输出:会一直不停的输出
cycle:无限迭代器,接受一个可迭代参数
import itertools

list_ = [1,2,3,4]
for i in itertools.cycle(a):
	print(i)

输出:1234一直无限循环输出
chain 接受两个可迭代参数,将两个可迭代参数的值连接在一起,返回一个迭代器
import itertools

list_1 = [1,2,3]
list_2 = [4,5,6]
print(list(itertools.chain(list_1, list_2)))

输出:
[1, 2, 3, 4, 5, 6]
filterfalse 过滤出false的选项

这个函数存在疑问,望大佬指点

import itertools

def f(x):
	if x % 2 == 0:
		return x

list_1 = [1,2,3,4]
print(list(itertools.filterfalse(f, list_1)))

list_2 = ["", None, 1,2,3,0]
print(list(itertools.filterfalse(None, list_2)))

list_3 = range(10)
print(list(itertools.filterfalse(lambda x:x%2, list_3)))
print(list(itertools.filterfalse(lambda x:x%2==0, list_3)))

输出:
[1, 3]
["", None, 0]
[0, 2, 4, 6, 8]
[1, 3, 5, 7, 9]

疑问:
1、list_1中函数返回的是偶数,返回的是奇数,与理解的过滤出偶数不符;
2、list_2中过滤出None,返回的是None,与理解的相符
那么问题来了,filterfalse函数返回的是符合条件的还是不符合条件的?????
3、list_3中filterfalse的第一个函数有什么区别?????
望大神指点迷津。。。。。

compress 接受两个可迭代参数,第一个参数根据第二个参数的真假性进行输出
import itertools

print(list(itertools.compress("abcd", [1,None,True])))

输出:
["a", "c"]
combinations和combinations_with_replacement 两个函数都可接受两个参数,第一个是可迭代对象,第二个是每个返回对象的长度,并且每个返回的对象是以元组的形式返回
二者的区别是combinations返回的元素没有重复的,而combinations_with_replacement 返回的元素可以是重复的
import itertools

list_ = [1,2,3,4]

print(list(itertools.combinations(list_, 2))) 
print(list(itertools.combinations_with_replacement(list_, 2)))

输出:
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (4, 4)]
注意:以上述代码为例,两个函数输出的每个元组的第一个数一定在第二个数的前边
permutations 接受两个参数,第一个是可迭代对象,第二个是每个对象的长度,并且是以元组的形式返回
import itertools

a = [1,2,3,4]
print(list(itertools.permutations(a, 2)))

输出:
[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
注意:以上述代码为例,结果中存在(1,2)和(2,1),但是不会存在(1,2)和(2,2)这种
product 生成笛卡尔积,接受两个可迭代参数
import itertools

a = ["a", "b", "c"]
b = [1,2,3,4]
print(list(itertools.product(a,b)))

输出:
[('a', 1), ('a', 2), ('a', 3), ('a', 4), ('b', 1), ('b', 2), ('b', 3), ('b', 4), ('c', 1), ('c', 2), ('c', 3), ('c', 4)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值