Python 中的 100 个项目 - 反向字符串替代答案



刚刚完成了学习Python的艰难方式,我现在正在为Python的GitHub 100项目工作。

首先让我说,我确实了解这是反向字符串项目的解决方案:

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

示例:"Hello string">>> 'gnirts olleH'

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

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

示例:"Hello string">>>"olleH gnirts"

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

编辑:我确实了解这里的while循环什么都不做,感谢您的反馈!

这是一个带有 for 循环的

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

Mayeb是这样的:

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

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

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

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

习惯:
while True: 
    ...
    if exit_condition(): 
        break

在您的帖子中,关于如何处理单词之间的多个空格有点不清楚。例如,'Goodbye cruelttWorld!'有两个选项卡。正确的结果是eybdooG leurc !dlroW还是eybdooG leurctt!dlroW

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

import re
st='Goodbye cruelttWorld!'
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

相关内容

最新更新