2015-11-03 90 views
0

我的問題是這樣的:創建重疊子集蟒蛇

舉例來說,如果我們有一個數字,以名單爲1至1200,如: 1,2,3,4,5,......,1200 我們如何提取一個特定的大小(可以說400)python中的以下塊: 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

你可以用切片的符號我的解決方案:http://stackoverflow.com/questions/509211/

這可以在一個單一的線放解釋-蟒蛇切片表示法。如果我瞭解你,就像[0:400]一樣。 – alpert

+2

作爲旁註:'[我爲我在範圍內(1200)]'→'列表(範圍(1200))' – spectras

回答

1

,以應對子列表,使用然GED指數

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])) 
+0

我認爲你的擴展失去了第一個0 - 400。爲了顯示第一個0-400的打印語句必須先到達 –

+0

@GiorgosPerakis啊是的,謝謝;我對顯示如何使用範圍更感興趣... fixed –

+0

我們可以讓這段代碼「one_liner」嗎? –

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

這是使用itertools.groupby

import itertools 

[list(g) for _, g in itertools.groupby(xrange(1, 1201), lambda x: not(x % 400))]