我有一個形式的字串串列:
my_list=['i99_W_t10', 'i99_M_t11', 'i94_M_t12', 'i93_W_t2', ..., 'i14_M_t19']
(所以總是 3 個欄位由_.
my_list=['i99_M_t11', 'i94_M_t12', 'i14_M_t19', 'i93_W_t2', 'i99_W_t10', ... ]
我知道如何通過將串列轉換為 pandas 資料框、將欄位拆分為列、對它們進行排序并回傳排序后的串列來做到這一點。但也許有一種更優雅的方式直接在串列上完成,而不必去尋找資料框?
uj5u.com熱心網友回復:
拆分每個字串'_',然后使用operator.itemgetter以您的特定順序從每個串列中提取專案
from operator import itemgetter
my_list=['i99_W_t10', 'i99_M_t11', 'i94_M_t12', 'i93_W_t2','i14_M_t19']
key_func = lambda x: itemgetter(1, 2, 0)(x.split('_'))
sorted(my_list, key=key_func)
# ['i99_M_t11', 'i94_M_t12', 'i14_M_t19', 'i99_W_t10', 'i93_W_t2']
itemgetter 實體
itemgetter(1, 2, 0)(['a', 'b', 'c'])
# ('b', 'c', 'a')
itemgetter(2, 1, 0)(['a', 'b', 'c'])
# ('c', 'b', 'a')
uj5u.com熱心網友回復:
你可以這樣做...
my_list = ['i99_W_t10', 'i99_M_t11', 'i94_M_t12', 'i93_W_t2', 'i14_M_t19']
# print(my_list)
def getValuesFromListItem(n):
global my_list
mvl = []
for i in my_list:
mvl = [i.split("_")[n]]
return mvl
def getListItemFromValue(val, n):
res = ""
global my_list
k = 0
for i in my_list:
l = i.split("_")
if l[n] == val:
res = i
del my_list[k]
break
k = 1
return res
l1 = getValuesFromListItem(1)
l2 = sorted(l1)
my_list2 = []
for i in l2:
my_list2.append(getListItemFromValue(i, 1))
my_list = my_list2
my_list2 = []
l1 = getValuesFromListItem(2)
l2 = sorted(l1)
for i in l2:
my_list2.append(getListItemFromValue(i, 2))
my_list = my_list2
my_list2 = []
l1 = getValuesFromListItem(0)
l2 = sorted(l1)
for i in l2:
my_list2.append(getListItemFromValue(i, 0))
print(my_list2)
輸出-
['i99_W_t10','i99_M_t11','i94_M_t12','i93_W_t2','i14_M_t19']
['i14_M_t19','i93_W_t2','i94_M_t12','i99_W_t10','i99_M_t11']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441074.html
