[英]Wrapping around a list as a slice operation
考慮以下簡單的python代碼
>>> L = range(3)
>>> L
[0, 1, 2]
我們可以對這個數組進行切片,如下所示:
>>> L[1:3]
[1, 2]
有沒有辦法通過向左移動來環繞上面的數組
[1, 2, 0]
通過簡單地使用切片操作?
剩下:
L[:1], L[1:] = L[-1:], L[:-1]
對:
L[-1:], L[:-1] = L[:1], L[1:]
在我看來,沒有辦法,除非您同意如上所示剪切和連接列表。 要進行您描述的包裝,您需要更改起始索引和結束索引。
這些的組合都不能提供尾部項目后跟初始項目的包裝點。 所以不能創建整個事物。
存在多種解決方法。 如果您需要順序訪問(例如在循環中),請參閱上面的答案,另請參閱itertools.islice
和.chain
以了解無復制順序方法。
如果您不太依賴於精確的切片語法,您可以編寫一個函數來產生所需的輸出,包括包裝行為。
例如,像這樣:
def wrapping_slice(lst, *args):
return [lst[i%len(lst)] for i in range(*args)]
示例輸出:
>>> L = range(3)
>>> wrapping_slice(L, 1, 4)
[1, 2, 0]
>>> wrapping_slice(L, -1, 4)
[2, 0, 1, 2, 0]
>>> wrapping_slice(L, -1, 4, 2)
[2, 1, 0]
警告:您不能在切片分配的左側使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.