2016-04-21 17 views
0

整数のようなアイテムのリストがあるとします。これは、ほぼ等しいサイズのサブリストに分割したいと考えています。それは....Pythonは重み付けに従ってアイテムを分割します

MyList = range(30) 
numpy.array_split(MyList, 3) 

....またはカスタムコードで...

nSubLists = 3 
subList =[] 
i = 0 
for item in MyList: 
    for i in range(nSubList): 
    subList[i].append(item) 
    if i > nSubLists: 
    i = 0 
    else: 
    i = i + 1 

numpyのを行うのはかなり簡単だ。しかし、今、私はアイテムが均等に間に分散したくないと仮定しますsubsists。私はそれらをいくつかの重みに従って分配したいとします。

wgtList1 = 20% 
wgtList2 = 30% 
wgtList3 = 50% 

%は、各サブリストに必要な元のリストの項目の割合を示します。明らかに、リストがパーセンテージまたは分数に従って均等に分割されない場合、それは最も近い整数分割になります。

このような重み付けをPythonのリスト分割に適用する最も良い方法は何ですか?

答えて

0

私は、Pythonには専門家ではないが、私は考えることができるプログラムによるソリューションは、このようなものになるだろう:

def split(original_list, weight_list): 
    sublists = [] 
    prev_index = 0 
    for weight in weight_list: 
     next_index = math.ceil((len(my_list) * weight)) 

     sublists.append(my_list[prev_index : next_index]) 
     prev_index = next_index 

    return sublists 

## function call ## 
my_list = [...] # whatever your list contains 
weight_list = [0.2, 0.3, 0.5] # This equals to your 20%, 30% and 50% 

sublists = split(my_list, weight_list) 
関連する問題