我正在寻找一种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
嗯......只要你可以插入切片符号就好像对我很好......如果你真的担心它把它放在一个具有合适名称的函数中...... –