【问题标题】:How to sort python lists due to certain criteria如何根据某些条件对 python 列表进行排序
【发布时间】:2016-07-13 10:27:05
【问题描述】:

我想使用 python 对列表或数组进行排序以达到以下目的: 假设我的初始列表是:

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

我想将第一个下划线后面有 1 的所有元素放在一个列表中,将 2 放在一个列表中,依此类推。所以结果应该是:

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)

可行,但它确实很尴尬,并且如果列表很大,它会涉及许多 for 循环,这会减慢一切。

有没有更优雅的方式使用 numpy 或任何东西?

感谢您的帮助。谢谢。

【问题讨论】:

    标签: list python-2.7 sorting numpy


    【解决方案1】:

    我不确定这个解决方案有多优雅;它更有效率。您可以先对列表进行排序,然后通过并过滤到最终的排序列表集:

    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 开始的连续数字)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多