Python中的100个项目 - 反向字符串备用答案

时间:2013-11-05 19:11:58

标签: python python-2.7

刚刚完成学习Python的艰难之路,我现在正在研究GitHub 100项目的Python。

首先让我说我明白这是反向字符串项目的解决方案:

string = raw_input("> ") 
print "< %r" % string[::-1]

示例:'Hello string'&gt;&gt;&gt; 'gnirts olleH'

上面的程序将字符串从后向前反转,但我想要的是反转,所以我做了这个(这就是我想要它做的事):

myString = raw_input("> ")

running = True

while running:
    myList = myString.split(' ')
    myList.reverse()
    myNewString = ' '.join(myList)
    print myNewString
    running = False

示例:'Hello string'&gt;&gt;&gt; 'olleH gnirts“

我是一个残酷的完美主义者,我很好奇,如果有人知道使用For循环而不是while循环实现相同的更好方法吗?我忽略了一些明显的东西吗谢谢!

编辑:我明白这里的while循环什么都不做,感谢您的反馈!

4 个答案:

答案 0 :(得分:2)

这是一个带有for循环的

s = 'Hello World'
rev = []
for i in s.split(' '):
    rev.append(i[::-1])

print ' '.join(rev)

答案 1 :(得分:1)

Mayeb是这样的:

>>> def reverse(s): return ' '.join (s[::-1] for s in s.split(' '))
... 
>>> print (reverse('Hello World!'))
olleH !dlroW

答案 2 :(得分:1)

操纵字符串的优雅方法是使用生成器和' '.join()

>>> myString = "Hello world!"
>>> print ' '.join( s[::-1] for s in myString.split() )
olleH !dlrow

既然你提到了while:当你需要一个无限循环时,这样做更惯用:

while True: 
    ...

    if exit_condition(): 
        break

答案 3 :(得分:0)

在你的文章中有一点不清楚如何处理单词之间的多个空格。例如,'Goodbye cruel\t\tWorld!'有两个标签。结果是eybdooG leurc !dlroW还是eybdooG leurc\t\t!dlroW

如果是后者,这就是ME中的'完美主义者'所说的是正确的,这里是一个带有正则表达式的'for'循环方法:

import re
st='Goodbye cruel\t\tWorld!'

li=[]
for e in (m.group(1) for m in re.finditer(r'(\S+|\s+)', st)):
    if e.strip():
        e=e[::-1]
    li.append(e)        

print '{}=>{}'.format(st, ''.join(li))   
# Goodbye cruel     World!=>eybdooG leurc       !dlroW