我有一個名為“block”的字串,我想檢查它包含在哪個串列中。它對我有用,如下所示,但我想知道是否有更好的方法(可能是映射器或字典鍵\值或類似的東西)。這就是我所擁有的:
def get_block_container(block: str) -> str:
if block in ['sss', 'srs']:
return 'prime'
if block in ['aaa', 'aba']:
return 'general'
if block in ['kkk', 'klk']:
return 'alpha'
if block in ['zyz', 'zzz']:
return 'beta'
return ''
有沒有更簡單的方法來做到這一點?因為串列可能會隨著時間的推移而變長。
謝謝!
uj5u.com熱心網友回復:
您當前的方法具有復雜性O(n*m)(n分支數和m最長串列的長度在哪里)我會使用允許O(1)查找的字典:
def get_block_container(block: str) -> str:
return {
'sss': 'prime',
'srs': 'prime',
'aaa': 'general',
'aba': 'general',
'kkk': 'alpha',
'klk': 'alpha',
'zyz': 'beta',
'zzz': 'beta'
}.get(block, '')
這可以通過將字典定義為函式外部的 const 來進一步改進(因此不需要在每次呼叫函式時都創建它)并通過對值使用 consts/enum 來減少重復,例如:
...
BLOCK_CONTAINER_MAPPING = {
'sss': 'prime',
'srs': 'prime',
'aaa': 'general',
'aba': 'general',
'kkk': 'alpha',
'klk': 'alpha',
'zyz': 'beta',
'zzz': 'beta'
}
...
def get_block_container(block: str) -> str:
return BLOCK_CONTAINER_MAPPING.get(block, '')
uj5u.com熱心網友回復:
您可以定義一個具有字串映射的字典,例如
example_dict = {
"sss" : "prime" # So the value of sss will be prime
"srs" : "prime" # So the value of srs will be prime
"aaa" : "general" # So the value of aaa will be general
"aba" : "general" # So the value of aba will be general
#...
}
然后您可以使用字典get()方法找出塊的值。
uj5u.com熱心網友回復:
您可以將回傳值存盤在 adict作為鍵中,并像這樣回傳它們:
def get_block_container(block: str) -> str:
dict_list = {"prime": ['sss', 'srs'], "general": ['aaa', 'aba'], "alpha": ['zyz', 'zzz']}
for key in dict_list:
if block in dict_list[key]
return key
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518383.html
標籤:Python列表映射
下一篇:有沒有辦法不讓我的清單消失?
