2017-03-31 42 views
1

我有一个整数列表和一个QTableWidget填充了33行。如何使用列表值作为范围?

我的列表是这样的(这对应于QTableWidget的各行):

my_list = [15, 14, 1, 2, 1] 

我谨行数来提取表信息。

例如,我要遍历表第15行,那么接下来的14行,那么接下来的1行等,所以在那一刻,我使用:

my_list = [15, 14, 1, 2, 1] 

for row in range(15): 
    # Do something 

for row in range(15,29) 
    # Do something 

for row in range(29,30) 
    # Do something 

... 

由于列表中的值(和项目数量)可以更改,因此最有效的方法是什么?

回答

1

这样你可以得到你对一个使用它们range()

import numpy as np 

my_list = [15, 14, 1, 2, 1] 

top = list(np.cumsum(my_list)) 
bottom = list(np.subtract(np.cumsum(my_list),my_list)) 

pairs = zip(bottom,top) 
ranges = iter([range(x[0], x[1]) for x in pairs]) 

现在,你可以去:

for item in next(ranges): 

编辑#1

如果您# Do something总是有所不同,你可以使用:

for row in next(ranges): 
    # Do something 

for row in next(ranges): 
    # Do something 

编辑#2

如果您#Do something始终是相同的,你可以去:

for item in my_list: 
    for row in next(ranges): 
     # Do something 
+0

当我使用下一个(范围)中的项目':',它只对前15个项目执行此操作。我应该用别的东西吗? – Joseph

+0

请参阅编辑。我知道你正在改变每个范围的操作。 – zipa

+0

啊,我明白你的意思了,谢谢!在这个问题中,我提到了列表中的5个项目,所以我将不得不在下一个(范围)中使用'5行。如果我在列表中有3个项目,那么我将不得不在下一个(范围)中使用'3行:'3次。基本上我正在运行GIS插件,因此列表中的项目数量可能会有所不同。有没有一种方法可以适应这种变化,而不必在下一个(范围)中使用_hardcode_'行:'x次?即它可以在一个循环中完成吗? – Joseph

1

您可以通过使用列表索引尝试

for row in range (my_list[0]): 
    print "abc" 
for row in range (my_list[1]): 
    print "bc" 
for row in range (my_list[2]): 
    print "ac" 
for row in range (my_list[3]): 
    print "amc" 
for row in range (my_list[4]): 
    print "c" 
+0

感谢您的回答,但想法是,列表中的项目数量可以改变(即我已经显示'5',但它也可能是'3')。我正在寻找一种更通用的方式,而不是_hardcoding_ :) – Joseph