2017-10-11 8 views
0

私は配列をとり、左側が入力配列である回文を返すPythonicの方法を探しています。パリンドロームの長さが奇数であること、すなわち元のアレイの最後の要素が複製されないことが重要である。配列をとり、奇妙な長さの回文を返します

私が見つけた最短の方法は次のとおりです。

arr + arr[-2::-1] 

しかし、それはIMOやや「た暗号」です。

これは読みやすいかどうかですか?

ありがとうございます。

使用例:

a = [1,2,3,4,5,6] 
print a+a[-2::-1] 
+0

投稿入力 – RomanPerekhrest

+0

@RomanPerekhrest:完了。 – goodvibration

+2

うーん...スライス表記法を解釈できる限り、私にはうまくいくと思われます...本当に心配しているのであれば、適切な名前の関数に入れてください... –

答えて

2

これは実際には非常にPython的です。 私はそれをこのままにして、多分Pythonの初心者のためのコメントを追加します。

少し読みやすく、あなたが既に持っている

a = [1,2,3,4,5,6] 
a.extend(a[-2::-1]) 
print(a) 
+2

'a'は間違いなく' list'であると仮定します。そうでなければ 'a + a [-2 :: - 1]'は文字列、リスト、タプルに対して機能しますので、それに固執します(実際には '+'を使うよりも読みやすくなります)... - これは元のリストを変更するので、望ましくないかもしれません... –

+0

@Jon - すべての有効なポイント... – 576i

3

コードが良いです。それは適切に動作し、最も確かにpythonicです。あなたが読みやす心配している場合、私はちょうど独自の機能でそれを置くことをお勧め:あなたは複雑なスライス表記を簡素化したい場合は、これは本質的に等価である

def palindrome(arr): 
    return arr + arr[-2::-1] 

result = arr + arr[::-1][1:] 

あるいは、

rev = list(reversed(arr)) 
rev.pop(0) 
result = arr + rev 

ただし、元のコードを使用します。

+1

これは一つです:*私はしかし、元のコード。* – mikuszefski

関連する問題