创建一个在for循环的每次迭代后移动的范围

时间:2019-06-18 13:18:55

标签: python loops for-loop range iteration

我是python和编码的新手,我正在尝试创建一个带范围的“ for”循环,类似于此循环:

for n in range(0,number_of_files)
   for i in range(0,5)

但是这一次,要使控制我的循环为n的每次迭代加5,从而产生如下结果:

i=[0,1,2,3,4,5](next iteration of n)[6,7,8,9,10],etc... 

我可以链接范围,但是我不知道文件夹中有多少文件,这会增加很多代码。

更新:

即使它不是最优雅的解决方案,我也成功获得了想要的东西,我使用了其中一个答案的结构:

i = 0
for n in range(0,number_of_files):
    for ii in range(i,i+5):
        {code}
    i += 5

我想做的是:

遍历一个文件夹中的所有excel文件,取此人的姓名,然后 创建一个包含所有名称的新excel文件。

需要2个循环,第一个循环将遍历所有文件并执行其操作。第二个需要堆叠名称,但要根据第一个文件中的行数(每个人的行数不相同)进行堆叠。总之,结果看起来像这样。

**name   /   surname   /   age   / date / time / statistics**
patient A/ surname A /   age A  / date / hours / statistics 1
patient A/ surname A /   age A  / date / hours / statistics 2
patient A/ surname A /   age  A / date / hours / statistics 3
patient A/ surname A /   age  A / date / hours / statistics 4
patient B/ surname B /   age  B / date / hours / statistics 1
patient C/ surname C /   age  C / date / hours / statistics 1
patient C/ surname C /   age  C / date / hours / statistics 1

6 个答案:

答案 0 :(得分:1)

使用itertools.count

from itertools import count

def chunked_range(num_of_chunks, size_of_chunk):
    for i in range(num_of_chunks):
        yield [*iter(lambda c=count(): i * size_of_chunk + next(c), size_of_chunk * (i + 1))]

for i in chunked_range(3, 5):
    print('i =', i)

打印:

i = [0, 1, 2, 3, 4]
i = [5, 6, 7, 8, 9]
i = [10, 11, 12, 13, 14]

答案 1 :(得分:0)

以下给出了预期的结果:

x = 0
for n in range(0,number_of_files):
    for i in range(x,x+5):
        ###
    x+=5

答案 2 :(得分:0)

您可以按恒定因子步进外循环:

number_of_files = 3
step = 5
for n in range (0, number_of_files * step, step):
   for i in range(0, step):
       j = i + n
       print(j)
       # code goes here

示例:https://ideone.com/iWZUTR

输出(按预期):

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

答案 3 :(得分:0)

是的,在不知道您期望输出或实现的目标的情况下,很难确定所需的解决方案。例如,从字面上阅读您的问题,我建议以下内容:

for n in range(0,number_of_files)
    i = n  (or just n)

如果需要每5或6个文件执行一次操作(0-5 = 6次迭代,但6-10次),这将为您列出的结果(排序)(见下文),无论退出多少文件= 5次迭代),然后(n mod 6或5)== 0将起作用

n=[0,1,2,3,4,5](continued iteration)[6,7,8,9,10],etc... 

如上所述,您的问题前后矛盾且不完整,以上内容说明了为什么会这样,以及为什么很难回答这个问题-也许,如果您对问题进行了调整,那么您会得到假设不同的结果想要的假设尚未回答

答案 4 :(得分:-1)

我认为您要尝试的是在每次内循环通过时将范围增加5。

pckgs = c("readr", "dplyr")
sapply(pckgs, library, character.only = TRUE)

这将循环浏览文件并增加5。

答案 5 :(得分:-1)

您想使累加器的迭代次数为i

counter = 0
for n in range(0,number_of_files)
   for i in range(0,5)
       #Code goes here
    counter += 5