2017-03-29 17 views
3

假設你有一個清單[1,2,3,...,99,100]如何切分列表以獲取新列表中每2個連續的列表元素?

import numpy as np 
ls = np.linspace(1,100,100) 

說你通過切片標誌擺弄找到那些對你有用。

print(ls[:2]) 
>> [ 1. 2.] 

print(ls[::2]) 
>> [ 1. 3. 5. 7. ... 97. 99.] 

我如何可以切片這樣的數據,我可以得到

[1,2],[3,4],[5,6],[7,8],...,[99,100] 

##也許並不重要,但我的目的是這個適應我的數據集,其中在列表中的值表示要比較的另一個值列表(other_values [index])的數字下標。是否有可能將切片與數組結合起來?

回答

5

您可以使用.resize(..,2)選項。其結果是,ls現在是一個numpy的陣列50個× 2個維度:

>>> ls.resize(ls.shape[0]/2,2) 
>>> ls 
array([[ 1., 2.], 
     [ 3., 4.], 
     [ 5., 6.], 
     [ 7., 8.], 
     [ 9., 10.], 
     [ 11., 12.], 
     [ 13., 14.], 
     [ 15., 16.], 
     [ 17., 18.], 
     [ 19., 20.], 
     [ 21., 22.], 
     [ 23., 24.], 
     [ 25., 26.], 
     [ 27., 28.], 
     [ 29., 30.], 
     [ 31., 32.], 
     [ 33., 34.], 
     [ 35., 36.], 
     [ 37., 38.], 
     [ 39., 40.], 
     [ 41., 42.], 
     [ 43., 44.], 
     [ 45., 46.], 
     [ 47., 48.], 
     [ 49., 50.], 
     [ 51., 52.], 
     [ 53., 54.], 
     [ 55., 56.], 
     [ 57., 58.], 
     [ 59., 60.], 
     [ 61., 62.], 
     [ 63., 64.], 
     [ 65., 66.], 
     [ 67., 68.], 
     [ 69., 70.], 
     [ 71., 72.], 
     [ 73., 74.], 
     [ 75., 76.], 
     [ 77., 78.], 
     [ 79., 80.], 
     [ 81., 82.], 
     [ 83., 84.], 
     [ 85., 86.], 
     [ 87., 88.], 
     [ 89., 90.], 
     [ 91., 92.], 
     [ 93., 94.], 
     [ 95., 96.], 
     [ 97., 98.], 
     [ 99., 100.]]) 
+0

這是完美的。我可以重複該模式來迭代地更改我的下標窗口ls.resize(ls.shape [0]/2,4) ls.resize(ls.shape [0]/2,8)' – mikey

+0

@mikey:是。儘管最後一次調用將失敗,因爲100不能被8除盡。 –

+0

我試圖使這個操作成爲函數的返回語句,其輸入是列表'ls'和所需列數'num_col'(' num_col = 2')。我可以得到結果在函數之外工作,但不能與函數一起工作。這是一個常見問題嗎? – mikey

2

list(zip(l[::2], l[1::2])) 

返回一個元組列表與你期望的配對

相關問題