当前位置:  开发笔记 > 编程语言 > 正文

如何迭代重复Python中每个元素的列表

如何解决《如何迭代重复Python中每个元素的列表》经验,为你挑选了2个好方法。

我正在使用Python 无限遍历列表,重复列表中的每个元素很多次.例如给出列表:

l = [1, 2, 3, 4]

我想输出每个元素两次,然后重复循环:

1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 2, 2 ... 

我知道从哪里开始:

def cycle(iterable):
  if not hasattr(cycle, 'state'):
    cycle.state = itertools.cycle(iterable)
  return cycle.next()

 >>> l = [1, 2, 3, 4]
 >>> cycle(l)
 1
 >>> cycle(l)
 2
 >>> cycle(l)
 3
 >>> cycle(l)
 4
 >>> cycle(l)
 1

但是,我将如何重复每个元素?

编辑

澄清这应该无限迭代.另外我用两次重复元素作为最短的例子 - 我真的想重复每个元素n次.

更新

您的解决方案是否会引导我找到我想要的东西:

>>> import itertools
>>> def ncycle(iterable, n):
...   for item in itertools.cycle(iterable):
...     for i in range(n):
...       yield item
>>> a = ncycle([1,2], 2)
>>> a.next()
1
>>> a.next()
1
>>> a.next()
2
>>> a.next()
2
>>> a.next()
1
>>> a.next()
1
>>> a.next()
2
>>> a.next()
2

谢谢你的快速解答!



1> Will Harris..:

这个怎么样:

import itertools

def bicycle(iterable, repeat=1):
    for item in itertools.cycle(iterable):
        for _ in xrange(repeat):
            yield item

c = bicycle([1,2,3,4], 2)
print [c.next() for _ in xrange(10)]

编辑:纳入bishanty的重复计数参数和亚当罗森菲尔德的列表理解.



2> Adam Rosenfi..:

你可以很容易地使用生成器:

def cycle(iterable):
    while True:
        for item in iterable:
            yield item
            yield item

x=[1,2,3]
c=cycle(x)

print [c.next() for i in range(10)]  // prints out [1,1,2,2,3,3,1,1,2,2]

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有