如何在2个字符之间切换?

时间:2011-11-10 21:09:05

标签: python

我正在使用python 2.7,我正试图找到解决这个问题的方法, 当我从某个函数得到一个字符串 我需要在第一个和最后一个字符之间切换。 例如,如果字符串是“hello”,它应该返回为“oellh” 切片将无法正常工作,我不能像我通常会做的那样更换字符,因为我不知道字符串是什么或者它会有多长。我想在位置0的字符和位置-1的字符之间进行替换 但我找不到能让我这样做的东西。 有没有人有任何建议?

4 个答案:

答案 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'