在范围函数内更改步长值?

2024-04-27 04:52:52 发布

您现在位置:Python中文网/ 问答频道 /正文

list1 = [1, 2, 3, 4]

我正试图找出一种方法来更改每个打印i的步长值

我试过的

r = 0
for i in range(0, 10, list1[r]):
    print i
    r = r + 1

Tags: 方法inforrangeprint步长list1正试图
3条回答

您必须迭代步骤,而不是元素:

index = 0
for i in range(len(your_list)):
    if (index+i)>=len(your_list):
        break
    else:
        print your_list[index+i]
        index = index + i

列表[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]上的输出:

1
2
4
7
11
16

列表["a","b","c","d","e","f","g","h","i"]上的输出:

a
b
d
g

考虑到你的评论,你想要的是:

>>> [range(0,10, i) for i in list1]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8], [0, 3, 6, 9], [0, 4, 8]]

更新: 由于我们无法在迭代时更改range()步骤:

>> for el in list1:
>>>    print range(0, 10, el)

[*0*, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, *2*, 4, 6, 8]
[0, 3, *6*, 9]
[0, 4, 8] (?)

上一个范围中没有元素

我建议使用while循环实现您自己的生成器。示例-

def varied_step_range(start,stop,stepiter):
    step = iter(stepiter)
    while start < stop:
        yield start
        start += next(step)

那么你可以用这个作为-

for i in varied_step_range(start,stop,steplist):
    #Do your logic.

我们做step = iter(stepiter),这样stepiter就可以是任何类型的iterable


演示-

>>> def varied_step_range(start,stop,stepiter):
...     step = iter(stepiter)
...     while start < stop:
...         yield start
...         start += next(step)
... 
>>> for i in varied_step_range(0,10,[1,2,3,4]):
...     print i
... 
0
1
3
6

相关问题 更多 >