如何在转到下一个索引位置之前迭代第一个索引值两次?
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。)
我正在尝试制作一个 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。)