python - 如何遍历列表,在 Python 中重复每个元素

标签 python iterator

我使用 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

感谢您的快速回答!

最佳答案

这个怎么样:

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's重复计数参数和 Adam Rosenfield's list comprehension .

关于python - 如何遍历列表,在 Python 中重复每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383565/

相关文章:

python - 比较三个文本列表以查看匹配的单词

java - 流与。 Map 的 entrySet 中的迭代器 - Java 8

python - 内置函数 iter() 如何将 Python 列表转换为迭代器?

python - 清理 for 循环中断

properties - 对于 D 范围,front() 应该是 @property 吗?

Python 对象属性 - 访问方法

Python:使用 win32com 打开 excel 工作簿时出错

python - 在 Python 中解压参数列表/字典案例中的关键字参数

python - 为什么我的 for 循环覆盖而不是追加?

c++ - 为什么我不能在 map 中放置一个迭代器?