亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Python中根據特定數據集對數組進行排序

如何在Python中根據特定數據集對數組進行排序

慕婉清6462132 2023-08-15 18:41:07
我正在使用 Python,并且數組列表中有以下目錄和文件,如下所示:file_list = []for file in file_list:    print(file)下面顯示的輸出(沒有特定的順序)。Testcase/result.logTestcase/system/system.logTestcase/data/database.logTestcase/mem/mem.logTestcase/cashe/cashe.log現在,我有另一個名為 的 Python 字符串target_str,它可以具有隨機值,例如'mem'或'database'。在這種情況下,如果target_str與內容條目匹配,則應更改數組file_list的順序,并將匹配的值放在前面。file_list例如:target_str = 'mem'    Testcase/mem/mem.log   [Note: this entry moves at the first position since it matches the 'target_str']        Testcase/result.log    Testcase/system/system.log    Testcase/data/database.log    Testcase/cashe/cashe.log 想知道如何file_list根據 的值對條目進行排序target_str?
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

您可以使用該函數sorted()并為其提供 lambda 鍵。在這種情況下,我們將保持它們相同的順序,但將包含的內容移到target_str頂部:


file_list = [

    'Testcase/result.log',

    'Testcase/system/system.log',

    'Testcase/data/database.log',

    'Testcase/mem/mem.log',

    'Testcase/cashe/cashe.log',

]

print(

    sorted(file_list, key=lambda f:[target_str not in f, file_list.index(f)])

)

# [

#    'Testcase/mem/mem.log', 

#    'Testcase/result.log', 

#    'Testcase/system/system.log', 

#    'Testcase/data/database.log', 

#    'Testcase/cashe/cashe.log'

# ]

如果key函數sorted()返回列表或元組,則元素按該順序優先排序。首先,排序target_str not in f(False排序之前True,所以如果文件名確實包含目標字符串,它將排在第一位)。然后,如果出現平局,則按文件名的索引進行排序。


如果您有一個非常大的文件列表,那么您可能需要進行排序enumerate(file_list),以獲取每個文件的索引,而不必.index()每次都調用。.index()價格昂貴。


查看完整回答
反對 回復 2023-08-15
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

假設您只想重新排列路徑,包括target_dir到頂部。您可以過濾包含其余路徑target_dir并與其余路徑合并


data = [

  'Testcase/result.log',

  'Testcase/system/system.log',

  'Testcase/data/database.log',

  'Testcase/mem/mem.log',

  'Testcase/cashe/cashe.log',

]


target_dir = 'mem'


target = [item for item in data if target_dir in item]

rest = [item for item in data if item not in target]


res = [*target, *rest]


print(res)


查看完整回答
反對 回復 2023-08-15
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

在這里排序不是一個好主意。而是使用OrderedDict。


file_list = ["Testcase/result.log",

"Testcase/system/system.log",

"Testcase/data/database.log",

"Testcase/mem/mem.log",

"Testcase/cashe/cashe.log"]

d? = {}

from collections import OrderedDict

keys = list(map(lambda x:x.split("/")[-1].strip(".log"), file_list))#I took the <text>.log? the text as the key?

d = OrderedDict(zip(keys,file_list))

text = "mem"

d.move_to_end(text, last=False)

print(d)

list(d.values())完成流程后即可使用。


查看完整回答
反對 回復 2023-08-15
  • 3 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號