2017-06-02 10 views
2

Pythonリストが2つの等しい半分で構成されているかどうかを確認する必要があります。リストの前半が効率的に等価であるかどうかをチェックする方法は?

[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:]をが、大きなリストには遅すぎると思われます。その他のソリューション?

+0

解決策はコピーせずにスライスしていますが、pythonはそれを行うための標準的な方法ではありません:https://stackoverflow.com/questions/3485475/can-i-create-a-view-on- a-python-list – Leon

+0

入力リストの長さが常に偶数であることを保証できますか? –

+0

@PM 2Ring:私は 'len(lst)%2 == 0' – planetp

答えて

7

2つのサブリストを作成せずにチェックを行うことは可能です。本当に大きなリストの方が速いかもしれません。また、あなたのリストには、偶数の長さであることを確認したい場合は

n = len(lst)//2 
all(lst[i]==lst[i+n] for i in range(n)) 

、あなたはまた、条件として

len(lst)%2==0 

を追加することができます。

+1

Gahインデックスをチェックします。ずっといい。 –

+0

バグが検出されました - 奇妙な長さのリストでは機能しません – Leon

+0

@MartijnPieters私はインデックスがisliceより優れていることに驚いています。そして、(私は)あなたは2つのアイスリスを必要としません。最後のシーケンスが終了すると 'zip'が止まるので、後半のアイリスを必要とし、前半のリスト全体を使います。 –

関連する問題