我的问题是:
例如,如果我们有一个从1到1200的数字列表,如: 1,2,3,4,5,......,1200 我们如何在python中提取特定大小(比方说400)以下块: 1-400,200-600,400-800,600-1000,800-1200
到目前为止我所做的是:a = [i for i in range(1200)]
swift_number = 400
num1 = 0
num2 = num1 + swift_number
while (len(a) - num1) > swift_number:
print "getting numbers from %s to %s", num1, num2
num1 = num2 - swift_number / 2
num2 = num1 + swift_number
答案 0 :(得分:2)
利用切片表示法,可以简化很多:
a = list(range(1200))
swift_number = 400 # how many items per chunk
step = int(swift_number/2) # how many items we shift for each chunk
chunks = [
a[base:base+swift_number]
for base in range(0, len(a), step)
]
这使chunks
成为列表列表。第一个列表有[0..399]个项目,第二个列表有项目[200..599],第三个列表有项目[400..799]等等。
这可以放在一行:
chunks = [a[base:base+swift_number] for base in range(0, len(a), step)]
答案 1 :(得分:1)
为了解决子列表,请使用范围索引:
x=[10, 20, 30, 40, 50, 60]
y=x[2:4] ## evaluates to [30, 40, 50]
所以你的代码看起来像是:
a=list(range(1, 1200+1))
width=400
for slice in range(2*len(a)/width - 1):
index=slice*width/2
print("%s" % (a[index:index+width]))
答案 2 :(得分:1)
这是我使用itertools.groupby
import itertools
[list(g) for _, g in itertools.groupby(xrange(1, 1201), lambda x: not(x % 400))]