2017-10-11 42 views
0

我正在尋找一種Pythonic方法來獲取一個數組並返回一個迴文,其左側是輸入數組。重要的是迴文長度將是奇數,即原始數組中的最後一個元素不會被複制。取一個數組並返回一個奇數長度的迴文

我發現的最簡單的辦法是:

arr + arr[-2::-1] 

但它是有點 「encryptic」 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