itertools编程训练

  • 1.字符串重复

    输入name="abcd",n=7,则函数的输出为:

    cyclicName(name, n) = "abcdabc"
    

    示例代码如下:

    from itertools import cycle
    
    def cyclicName(name, n):
        gen = cycle(name)
        res = [next(gen) for _ in range(n)]
        return ''.join(res)
    

    主要参考itertools的使用,参考1,2.


  • 2.dropwhile 的使用

    itertools.dropwhile(predicate, iterable)
    

    当迭代器中的元素使predicate函数为True时,丢弃迭代器中的元素。否则,返回该元素及该元素后的所有元素。例如:

    from itertools import dropwhile
    a=list(dropwhile(lambda x: x < 5, [1, 3, 6, 2, 1]))
    print a
    

    输出为:

    [6,2,1]
    

  • 3.实现浮点数的range函数

    给定起点终点和步长,生成一组数。例如,start=-0.5,stop=0.5,step=0.1则其输出应该是,[-0.5,-0.4,-0.3,-0.2,-0.1,0.0,0.1,0.2,0.3,0.4].
    示例代码:

    from itertools import count, takewhile
    
    def floatRange(start, stop, step):
        gen = takewhile(lambda x: x<stop, count(start,step))
        return list(gen)
    

    主要是无限迭代器counttakewhile函数的使用。[3][3]


  • 4.组合生成器之permutations
    给一个英文人名列表,两两组合并按字典顺序。例如,
    players = ["trainee", "warrior", "ninja"]
    则输出为:

    rockPaperScissors(players) = [["ninja", "trainee"], ["ninja", "warrior"], 
                                  ["trainee", "ninja"], ["trainee", "warrior"], 
                                  ["warrior", "ninja"], ["warrior", "trainee"]]
    

    示例代码如下:

    from itertools import permutations
    
    def rockPaperScissors(players):
        return sorted(map(lambda x:list(x),list(permutations(players,2))))
    

    permutations 用于求序列的排列。

  • 5.拆分可迭代对象

迭代器参数结果备注
chain()p,q,…p0, p1, …,p_last,q0,q1…迭代多个单层容器
chain.from_iterable()iterablep0, p1, … plast, q0, q1, …chain.from_iterable([‘ABC’, ‘DEF’]) --> A B C D E F,迭代两层
import itertools
chars = itertools.chain("abc", "def")
print([x for x in chars])
# ['a', 'b', 'c', 'd', 'e', 'f']
chars = itertools.chain.from_iterable([["abc"], ["def"]])
print([x for x in chars])
# ['abc', 'def']
  • 6.累加
chars = itertools.accumulate([1,2,3])
print([x for x in chars])

接受可选参数,func,accumulate(list[,func)

import operator
chars = itertools.accumulate([1,3,3], operator.mul)
print([x for x in chars])

  • Refer

1 http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/itertools.
2 https://docs.python.org/3.9/library/itertools.html#itertools.accumulate
[3] http://funhacks.net/2017/02/13/itertools/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值