我正在尋找一種Pythonic方法來獲取一個數組並返回一個迴文,其左側是輸入數組。重要的是迴文長度將是奇數,即原始數組中的最後一個元素不會被複制。取一個數組並返回一個奇數長度的迴文
我發現的最簡單的辦法是:
arr + arr[-2::-1]
但它是有點 「encryptic」 IMO。
這是一個更易讀的約定嗎?
謝謝。
用例:
a = [1,2,3,4,5,6]
print a+a[-2::-1]
我正在尋找一種Pythonic方法來獲取一個數組並返回一個迴文,其左側是輸入數組。重要的是迴文長度將是奇數,即原始數組中的最後一個元素不會被複制。取一個數組並返回一個奇數長度的迴文
我發現的最簡單的辦法是:
arr + arr[-2::-1]
但它是有點 「encryptic」 IMO。
這是一個更易讀的約定嗎?
謝謝。
用例:
a = [1,2,3,4,5,6]
print a+a[-2::-1]
這其實是很Python的。 我會這樣離開它,也許爲Python初學者添加一條評論。
更可讀的有點是
a = [1,2,3,4,5,6]
a.extend(a[-2::-1])
print(a)
假設'a'絕對是一個'list' ......否則'a + a [-2 :: -1]'將適用於字符串,列表和元組,所以我會堅持這一點(我會認爲它不是實際上比使用'+'更具可讀性)...此外 - 這改變了原始列表,這可能不是所期望的... –
@Jon - 所有有效的點... – 576i
你已經擁有的代碼是好的。它工作正常,肯定是pythonic。如果你擔心的可讀性,那麼我建議只是把它自身的功能:
def palindrome(arr):
return arr + arr[-2::-1]
如果你想簡化複雜的切片符號,這基本上是等價的:
result = arr + arr[::-1][1:]
或者,如果你真的想完全擺脫它:
rev = list(reversed(arr))
rev.pop(0)
result = arr + rev
但是,我會去你的原代碼。
這就是:*然而,我會您的原始代碼。* – mikuszefski
發佈輸入樣本 – RomanPerekhrest
@RomanPerekhrest:完成。 – goodvibration
嗯......只要你可以插入切片符號就好像對我很好......如果你真的擔心它把它放在一個具有合適名稱的函數中...... –