2017-05-10 36 views
0

我有一个调用for循环如果它的范围正在增加的问题。For循环在一个表中增加范围

我有一个表(列表的列表):

for i in range(0, len(table)): 
    if len(table[i]) > 10: 
      new_row = table[i][11:] 
      table.insert(i+1, []) 
      for val in new_row: 
       table[i+1].append(val) 

e.g表的长度是50并且有一个数,其中我有超过10个值的行。在创建每个新行(table.insert(i + 1,[])后,表的长度增加,因此,当循环到达列49大于10的行49时,它的实际行号变为大于循环的范围

我怎样才能让循环知道的范围内增加目前,只有行最多的50有,如果条件适用

我试过循环之前增加一个计数变量。?

count = 0 
for i in range(0, len(table)+count): 
    if len(table[i]) > 10: 
     new_row = table[i][11:] 
     table.insert(i+1, []) 
     for val in new_row: 
       table[i+1].append(val) 
     count = count + 1 

这似乎没有帮助!也许某种递归函数在for循环中不断轮询表的长度?我不太确定。

谢谢

+0

范围调用在循环的开始处进行一次,因此在循环开始后您不能更改此范围。你应该使用'while'循环而不是'for'循环。 – pcarter

+0

参考http://stackoverflow.com/questions/11905606/changing-the-number-of-iterations-in-a-for-loop – JkShaw

回答

1

这是你在找什么?

idx = 0 
while True: 
    try: 
     lst = table[idx] 
    except IndexError: 
     break 
    if len(lst) > 10: 
     table.insert(idx+1, lst[10:]) 
     # You probably want to cut current lst here as well? 
     # table[idx] = lst[:10] 
    idx += 1 
+0

是的,这正是。谢谢!更好的方法来解决这个问题。 – arsenal88

0

您可以使用while循环来实现此目的!

count = 0 
i=0 #initial value 
while table: #your iterating loop until table holds a value! 
    if len(table[i]) > 10: 
     new_row = table[i][11:] 
     table.insert(i+1, []) 
     for val in new_row: 
       table[i+1].append(val) 
     count = count + 1 
    i+=1 #increment by 1