2017-10-11 48 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