我需要檢查一個Python列表是否由兩個相等的一半組成。例如,該列表的作用:如何檢查列表的前半部分是否與其他部分效率相同?
[6, 2, 0, 2, 3, 2, 6, 2, 0, 2, 3, 2]
這並不
[6, 2, 0, 2, 4, 6]
我試過這個檢查:len(lst) % 2 == 0 and lst[:len(lst)//2] == lst[len(lst)//2:]
,但它似乎是更大的名單太慢。其他解決方案?
我需要檢查一個Python列表是否由兩個相等的一半組成。例如,該列表的作用:如何檢查列表的前半部分是否與其他部分效率相同?
[6, 2, 0, 2, 3, 2, 6, 2, 0, 2, 3, 2]
這並不
[6, 2, 0, 2, 4, 6]
我試過這個檢查:len(lst) % 2 == 0 and lst[:len(lst)//2] == lst[len(lst)//2:]
,但它似乎是更大的名單太慢。其他解決方案?
可以在不創建兩個子列表的情況下執行檢查。真正的大列表可能會更快。
n = len(lst)//2
all(lst[i]==lst[i+n] for i in range(n))
如果你還需要檢查你的列表是偶數長,你也可以添加
len(lst)%2==0
爲條件。
Gah,指數。好多了。 –
檢測到的錯誤 - 不適用於奇數長度列表 – Leon
@MartijnPieters我很驚訝指數比islice好。並且(我認爲)你不需要2個分支:你只需要後半部分的邊界,並使用整個列表作爲前半部分,因爲當最短序列終止時'zip'將停止。 –
該解決方案是關於切片沒有複製,但python似乎並不是內置或標準方式做到這一點:https://stackoverflow.com/questions/3485475/can-i-create-a-view-on- a-python-list – Leon
你能保證輸入列表的長度總是一樣嗎? –
@PM 2Ring:我使用額外的檢查,'len(lst)%2 == 0' – planetp