假設我有一個變量S
與字符串"1:3"
(或就此而言,"1"
,或"1:"
或":3"
),我想使用,作爲對切片符列表L
。你不能簡單地做L[S]
,因爲一個切片所需的參數是"int:int"
。現在的Python:想用一個字符串作爲切片符
,我現在有一些醜陋的代碼解析S
到它的兩個組成int
S和處理所有邊緣案件(其中4)要拿出正確的片段中的存取,但是這僅僅是醜陋和unpythonic。
如何優雅地採取字符串S
並將其用作我的切片說明符?
假設我有一個變量S
與字符串"1:3"
(或就此而言,"1"
,或"1:"
或":3"
),我想使用,作爲對切片符列表L
。你不能簡單地做L[S]
,因爲一個切片所需的參數是"int:int"
。現在的Python:想用一個字符串作爲切片符
,我現在有一些醜陋的代碼解析S
到它的兩個組成int
S和處理所有邊緣案件(其中4)要拿出正確的片段中的存取,但是這僅僅是醜陋和unpythonic。
如何優雅地採取字符串S
並將其用作我的切片說明符?
這可以通過使用列表理解來避免太多黑客攻擊。我們將字符串拆分爲:
,將拆分項作爲參數傳遞給slice()
內建。這使我們能夠很好地產生切片一條線,其中,在每一種情況下的工作我能想到的辦法:
slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])
通過使用slice()
內置,我們巧妙地避免應付太多的邊緣情況我們自己。
實例:
>>> some_list = [1, 2, 3]
>>> string_slice = ":2"
>>> some_list[slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])]
[1, 2]
>>> string_slice = "::-1"
>>> some_list[slice(*[int(i.strip()) if i else None for i in string_slice.split(":")])]
[3, 2, 1]
您可能想要解釋*爲什麼這是一個糟糕的主意(它肯定是)。 –
好的..做了一個編輯。 – vivek
非常好,簡潔! – staggart