如何在转到下一个索引位置之前迭代第一个索引值两次?

How to iterate the first index value twice before going to the next index position?

我正在尝试制作一个 for 循环,在转到下一个索引之前将每个索引迭代两次,例如,如果我有以下列表:

l = [1,2,3]

如果是这样我想迭代一下:

l = [1,1,2,2,3,3]

有人可以帮我解决这个问题吗?

您可以创建一个重复元素并展平结果的列表推导式:

l = [1,2,3]
repeat = 2

[n for i in l for n in [i]*repeat]
# [1, 1, 2, 2, 3, 3]

最明显的是一个生成器函数,它生成可迭代对象中的每个项目两次:

def twice(arr):
   for val in arr:
       yield val
       yield val

for x in twice([1, 2, 3]):
    print(x)

如果你需要一个列表,那么

l = list(twice([1, 2, 3]))
l = [1, 2, 3]
lst = []

for x in l:
   for i in range(2):
      lst.append(x)
print(lst)
# [1, 1, 2, 2, 3, 3]

您可以使用 NumPy 解决这个问题。

import numpy as np

l = np.repeat([1,2,3],2)

Repeat 将数组的元素重复指定的次数。这也是 returns 一个 NumPy 数组。如果您愿意,可以使用 list(l) 将其转换回列表。但是,NumPy 数组的行为类似于列表,因此大多数时候您不需要更改任何内容。

毫不奇怪,more-itertools 有:

>>> from more_itertools import repeat_each
>>> for x in repeat_each([1, 2, 3]):
...     print(x)
... 
1
1
2
2
3
3

(它还有一个可选的第二个参数,用于告诉它重复的频率。例如 repeat_each([1, 2, 3], 5)。默认值为 2。)