我正在使用python 2.7,我正试图找到解决这个问题的方法, 当我从某个函数得到一个字符串 我需要在第一个和最后一个字符之间切换。 例如,如果字符串是“hello”,它应该返回为“oellh” 切片将无法正常工作,我不能像我通常会做的那样更换字符,因为我不知道字符串是什么或者它会有多长。我想在位置0的字符和位置-1的字符之间进行替换 但我找不到能让我这样做的东西。 有没有人有任何建议?
答案 0 :(得分:5)
s[-1] + s[1:-1] + s[0] if len(s) > 1 else s
除了''和'a'(单个字符)的边缘情况之外,这将交换所有内容。
下面的代码片段将字符串分成三个块。结束块交换第一个和最后一个字母,而中间块抓住字符串的中间。
s[-1] + s[1:-1] + s[0]
# Below, I show each chunk in the interpreter.
>>> s = 'hello'
>>> s[-1]
'o'
>>> s[1:-1]
'ell'
>>> s[0]
'h'
你不能切断一个<的字符串。由于索引错误以及没有理由交换1个字符的字符串,因此长度为2。这就是if .. else可以防范的。如果您不理解.. else的工作原理,请阅读下面的代码段。
# This returns expr1 if expr2 is true, otherwise it returns expr3
a = expr1 if expr2 else expr3
# The above expression is the short hand of...
if expr2:
a = expr1
else:
a = expr3
我希望这是有道理的。
答案 1 :(得分:4)
字符串是不可变的,因此您无法直接修改它们,但您可以从现有字符串创建新字符串。试试这个:
if len(s) < 2:
return s
else:
return s[-1] + s[1:-1] + s[0]
答案 2 :(得分:0)
老式的Pythonistas不需要任何steenking三元运算符:
Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> for s in ('abc', 'ab', 'a', ''):
... print repr(s[-1:] + s[1:-1] + s[:-1][:1])
...
'cba'
'ba'
'a'
''
>>>
答案 3 :(得分:-2)
单线解决方案
正则表达式不如字符串替换效率高,但它不应对短字符串产生很大的影响。
>>> s = 'hello'
>>> print re.sub('^(.)(.*?)(.)$',r'\3\2\1',s)
'oellh'