python的逆序

时间:2013-09-25 08:42:04

标签: python string reverse

我坚持以下实验练习:

  

我们需要的第一件事是一个例行公事,一句话,将会在   总而言之,除了第一个和最后一个之外,所有的顺序都混杂起来   字符。而不是随意移动我们周围的人物   将颠倒字母的顺序。以下代码实现   这样:

def jumble(x):
    return x[len(x)::-1]
my_string="Alistair"
print(" Reverse ",jumble(my_string))
     

将上述代码复制到文件并运行它。目前它逆转了   “my_string”中所有字符的顺序。修改代码,以便   这个词的第一个和最后一个字母是不相反的。那是,   而不是产生"riatsilA"它产生"Aiatsilr"

这是我上面部分的代码:

def jumble(x):
    temp0=x[0]
    temp_last=x[-1]
    x_new=temp0 + x[-2:0:-1] + temp_last
    return x_new
my_string="Alistair"
print(" Reverse ",jumble(my_string))
  

上述例程不考虑前导或尾随白色   空格,标点符号或其他可能合法参与的字符   字符串,但不应混淆。对于   例如,如果字符串是" Alistair, ",结果应该是   " riatsilA, ".修改您的例程,以便只有FIRST连续   一系列字母字符(减去第一个和最后一个   字符)是相反的。确保最终返回的字符串   包括所有其他前导和尾随字符。

我不知道如何做到这一点,因为白色空间和标点符号可以在任何地方发生,我正在考虑有两个列表,一个用于空格和标点符号,另一个用于“连续系列的字母字符”,使用追加方法将元素附加到每个列表,但不知道如何保留index.Can有人帮助我吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

#!/usr/bin/env python
#-*-coding:utf-8-*-
import re

def reverse(s):
    p = re.compile(r'\w+')
    for m in p.finditer(s):
        word = m.group()
        if word:
            p = s.partition(word)
            l = list(p)
            index = p.index(word)
            l[index] = l[index][::-1]
            l2 = list(l[index])
            l2[0],l2[-1]=l2[-1],l2[0]
            l[index]=''.join(l2)
            s = ''.join(l)
    return s

s="Alistair Chris,"
print reverse(s)

修好了。

答案 1 :(得分:0)

以下代码snipplet可能会帮助您完成上一个任务。 如果在字符串的开头或结尾处找到特殊字符,则没有特殊处理来恢复子集。

# Special chars which should be ignored for reverting
SPECIALCHARS = [' ', '.', ',']

def reverse( string_ ):
    # Find occurence of 'special' chars. Stack position and char into a list.
    specchar = [( i, ltr ) for i, ltr in enumerate( string_ ) if ltr in SPECIALCHARS]
    if specchar:
        # Remove all the special characters
        newstring = ''.join( c for c in string_ if c not in SPECIALCHARS )
        # Reverse the legal characters
        newstring = newstring[::-1]
        offset = 0
        # Re-insert the removed special chars
        for pos, char in specchar:
            if pos + 1 + offset >= len( newstring ):
                # Append at the end
                newstring += char
            else:
                # Insert
                newstring = newstring[:pos + offset] + char + newstring[pos + offset:]
                offset += 1
        return newstring
    else:  # No special char at all, so just revert
        return string_[::-1]


print " '%s' =?= ' riatsilA, '" % ( reverse( " Alistair, " ) )

将导致以下输出:' riatsilA, ' =?= ' riatsilA, '

只需忽略第一个和最后一个字符即可恢复。 用这个来反转'中间':t [1:-1] [:: - 1] 然后添加第一个和最后一个字符。

>>> t = "Alistair"
>>> t[0]+t[1:-1][::-1]+t[-1] 
'Aiatsilr'

修改

好的,现在我想我明白了你想要的东西: - )

newstr = ""
fullstr = ""
for char in mystr:
    if char in SPECIALCHARS:
        if len( newstr ): # Is already something to invert there?
            #Ignore 1st and last char and revert the rest
            newstr = newstr[0] + newstr[1:-1][::-1] + newstr[-1]
            fullstr += newstr + char
        else: # Special char found but nothing to revert so far
            fullstr += char
        newstr = ""
    else: # No special char so just append
        newstr += char
print "'%s'" % fullstr