首页 > 编程语言 >python3常用库之itertools使用

python3常用库之itertools使用

时间:2024-10-09 16:50:15浏览次数:8  
标签:常用 迭代 res 元素 list itertools print python3

无限迭代器

import itertools


# 无限迭代器
# 无限序列只有在for迭代时才会无限地迭代下去,如果只是创建了一个迭代对象,它不会事先把无限个元素生成出来,事实上也不可能在内存中创建无限多个元素。
natuals = itertools.count(1)
odd = itertools.count(0, 2)
cs = itertools.cycle("ABC")
ns = itertools.repeat("A")

# repeat提供第二个参数就可以限定重复次数
ns = itertools.repeat("A", 3)
print(list(ns))  # ['A', 'A', 'A']

accumulate

将可迭代对象中的元素累积起来,可指定累积的函数
# 将可迭代对象中的元素累积起来,可指定累积的函数
res = itertools.accumulate([1, 2, 3, 4, 5])
print(list(res))  # [1, 3, 6, 10, 15]

chain

把一组迭代对象串联起来,形成一个更大的迭代器
# 把一组迭代对象串联起来,形成一个更大的迭代器
c = itertools.chain("abc", "xyz")
print(list(c))  # ['a', 'b', 'c', 'x', 'y', 'z']

c = itertools.chain.from_iterable(["abc", "xyz"])
print(list(c))  # ['a', 'b', 'c', 'x', 'y', 'z']

groupby

groupby()把迭代器中相邻的重复元素挑出来放在一起
# groupby()把迭代器中相邻的重复元素挑出来放在一起
for key, group in itertools.groupby("AAABBBCCAAA"):
    print(key, list(group))

# A ["A", "A", "A"]
# B ["B", "B", "B"]
# C ["C", "C"]
# A ["A", "A", "A"]

for key, group in itertools.groupby("AaaBBbcCAAa", lambda c: c.upper()):
    print(key, list(group))

# A ["A", "a", "a"]
# B ["B", "B", "b"]
# C ["c", "C"]
# A ["A", "A", "a"]

dropwhile

返回在预测失败之后的序列元素
# 返回在预测失败之后的序列元素
l = itertools.dropwhile(lambda x: x < 5, [1, 3, 5, 2])
print(list(l))  # [5, 2]

filterfalse

筛选使预测结果为假的序列元素
# 筛选使预测结果为假的序列元素
l = itertools.filterfalse(lambda x: x < 5, [1, 3, 5, 2])
print(list(l))  # [5]

 takewhile

 根据条件判断来截取出一个有限的序列 

# 根据条件判断来截取出一个有限的序列
ns = itertools.takewhile(lambda x: x <= 5, natuals)
print(list(ns))  # [1, 2, 3, 4, 5]

 compress

通过选择器筛选数据元素序列
# 通过选择器筛选数据元素序列
res = itertools.compress("ABCDE", [1, 0, 1, 1, 0])
print(list(res))  # ['A', 'C', 'D']

 islice

# 切片
res = itertools.islice("ABCDE", 2)
print(list(res))  # ['A', 'B']

res = itertools.islice("ABCDE", 2, None)
print(list(res))  # ['C', 'D', 'E']

 pairwise

返回序列中两两相邻的元素
# 返回序列中两两相邻的元素
res = itertools.pairwise("ABCD")
print(list(res))  # [('A', 'B'), ('B', 'C'), ('C', 'D')]

 starmap

 对可迭代对象中的元素应用函数,元素以参数元组的形式传递给函数 

# 对可迭代对象中的元素应用函数,元素以参数元组的形式传递给函数
res = itertools.starmap(pow, [(2, 3), [3, 4]])
print(list(res))  # [8, 81]

 tee

将一个迭代器拆分成多个相同的迭代器
# 将一个迭代器拆分成多个相同的迭代器
iter1, iter2 = itertools.tee("ABC")
print(list(iter1))  # ['A', 'B', 'C']
print(list(iter2))  # ['A', 'B', 'C']

zip_longest

将多个迭代器中的元素逐个配对,以最长的迭代器为准,可以指定填充值
# 将多个迭代器中的元素逐个配对,以最长的迭代器为准,可以指定填充值
res = itertools.zip_longest(["k1", "k2", "k3"], ["v1", "v2"], fillvalue="")
print(list(res))  # [('k1', 'v1'), ('k2', 'v2'), ('k3', '')]

product

用于计算多个可迭代对象的笛卡尔积,生成所有可能的组合
# product 用于计算多个可迭代对象的笛卡尔积,生成所有可能的组合
res = itertools.product([1, 2], [3, 4])
print(list(res))  # [(1, 3), (1, 4), (2, 3), (2, 4)]

 permutations

用于生成可迭代对象中长度为 r 的所有排列

# permutations 函数用于生成可迭代对象中长度为 r 的所有排列
res = itertools.permutations([1, 2, 3], 2)
print(list(res))  # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

 combinations


# combinations 函数用于生成可迭代对象中长度为 r 的所有组合,按照排序顺序生成
res = itertools.combinations([1, 2, 3], 2)
print(list(res))  # [(1, 2), (1, 3), (2, 3)]

# combinations_with_replacement 函数与 combinations 类似,用于生成可迭代对象中长度为 r 的所有组合,可以包含重复元素
res = itertools.combinations_with_replacement([1, 2, 3], 2)
print(list(res))  # [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

 

标签:常用,迭代,res,元素,list,itertools,print,python3
From: https://www.cnblogs.com/caroline2016/p/18454629

相关文章

  • python3常用内置函数及常用库functools使用
    常用内置函数#lambda函数-----------------------------add=lambdaa,b,c:a+b+cprint(add(1,2,3))#6#sorted函数-----------------------------a_l=[1,3,5,7,0,-1,-9,-4,-5,8]print(sorted(a_l))#[-9,-5,-4,-1,0,1,3,5,7,8]p......
  • python3常用库之哈希hashlib和hmac使用
    hashlibimporthashlib#MD5是最常见的哈希算法,速度很快,生成结果是固定的128bit/16字节,通常用一个32位的16进制字符串表示。md5=hashlib.md5()md5.update("hello".encode())print(md5.hexdigest())#5d41402abc4b2a76b9719d911017c592#数据量很大时分块多次调用up......
  • python3常用库之collections集合库
    namedtuple#namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。#用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用Coord=collections.namedtuple("Coord",["......
  • python3常用库之datetime库
    日期时间fromdatetimeimportdatetime,timedelta,timezonenow=datetime.now()print(now)#2024-02-0214:27:12.247121dt=datetime(2023,12,31,12,30,00)print(dt)#2023-12-3112:30:00#时间戳,和时区无关ts=dt.timestamp()print(ts)#17039970......
  • python3常用库之解析命令行参数argparse
    在命令行程序中需要获取命令行参数可以使用sys库和argparse库。sys库可用于处理简单的命令行参数,argparse库可用于处理复杂的命令行参数。#argparse解析命令行参数importargparse,sysdefmain():#定义一个ArgumentParser实例:参数分别为程序名、描述、说明信息......
  • python3常用库之Base64编码
    Base64是一种用64个字符来表示任意二进制数据的方法。importbase64by="abc中文".encode()b=base64.b64encode(by)print(by)#b'abc\xe4\xb8\xad\xe6\x96\x87'print(b)#b'YWJj5Lit5paH'by2=base64.b64decode(b)print(by2)#b'abc\xe......
  • pandas常用数据格式IO性能对比
    前言本文对pandas支持的一些数据格式进行IO(读写)的性能测试,大数据时代以数据为基础,经常会遇到操作大量数据的情景,数据的IO性能尤为重要,本文对常见的数据格式csv、feather、hdf5、jay、parquet、pickle性能进行对比。csvCSV(Comma-SeparatedValues)是一种用于存储表格数据的......
  • Hive(五)常用函数
    Hive常用函数字符串函数返回值函数描述stringconcat(string/binaryA,string/binaryB…)对二进制字节码或字符串按次序进行拼接intinstr(stringstr,stringsubstr)查找字符串str中子字符串substr出现的位置intlength(stringA)返回字符串的长度int......
  • js常用校验规则
    一、校验数字的js正则表达式1数字:[1]$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-n位的数字:^\d{m,n}$5零和非零开头的数字:^(0|[1-9][0-9])$6非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$7带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$8正数、负......
  • js常用校验规则2
    1.1、校验是否为空(null/空串)/*校验是否为空(null/空串)*/varcheckNull=function(str){if(str==null||str==""){returnfalse;}returntrue;}1.2、校验是否为纯数字/*校验是否为纯数字js的isNaN函数*/varcheckNum=function(num){if(isNaN(num)){......