2016-03-25 38 views
1

我想一個列表排序,或者使用Python數組才達到以下排序: 說我的初步名單是:如何Python列表由於某些標準

example_list = ["retg_1_gertg","fsvs_1_vs","vrtv_2_srtv","srtv_2_bzt","wft_3_btb","tvsrt_3_rtbbrz"] 

我想獲得的所有在第一個下劃線後面有一個下劃線的元素,以及在一個列表中有兩個下劃線的元素,等等。所以結果應該是:

sorted_list = [["retg_1_gertg","fsvs_1_vs"],["vrtv_2_srtv","srtv_2_bzt"],["wft_3_btb","tvsrt_3_rtbbrz"]] 

我的代碼:

import numpy as np 
import string 

example_list = ["retg_1_gertg","fsvs_1_vs","vrtv_2_srtv","srtv_2_bzt","wft_3_btb","tvsrt_3_rtbbrz"] 

def sort_list(imagelist): 

    # get number of wafers 
    waferlist = [] 
    for image in imagelist: 
     wafer_id = string.split(image,"_")[1] 
     waferlist.append(wafer_id) 
    waferlist = set(waferlist) 
    waferlist = list(waferlist) 
    number_of_wafers = len(waferlist) 
    # create list 
    sorted_list = [] 
    for i in range(number_of_wafers): 
     sorted_list.append([]) 
    for i in range(number_of_wafers): 
     wafer_id = waferlist[i] 
     for image in imagelist: 
      if string.split(image,"_")[1] == wafer_id: 
       sorted_list[i].append(image) 
    return sorted_list 

sorted_list = sort_list(example_list) 

的作品,但它確實是尷尬的,它涉及到許多該放慢一切,如果名單是大循環。

有沒有更優雅的方式使用numpy或任何東西?

幫助表示讚賞。謝謝。

回答

2

我不確定這個解決方案有多優雅;它更高效一點。你可以先對列表進行排序,然後再通過和過濾到最後一組分類列表:

example_list = ["retg_1_gertg","fsvs_1_vs","vrtv_2_srtv","srtv_2_bzt","wft_3_btb","tvsrt_3_rtbbrz"] 

sorted_list = sorted(example_list, key=lambda x: x[x.index('_')+1]) 

result = [[]] 
current_num = sorted_list[0][sorted_list[0].index('_')+1] 
index = 0 

for i in example_list: 
    if current_num != i[i.index('_')+1]: 
     current_num = i[i.index('_')+1] 
     index += 1 
     result.append([]) 
    result[index].append(i) 

print result 

如果能第一個下劃線字符之後做出的價值觀假設,你可以清理一個位(例如, ,如果你知道他們將始終是從1開始的連續數字)。