这样做的pythonic方式是什么?
从这个:'这是一个尝试'的字符串:'尝试字符串a是这个'
我的第一个猜测是:
for w in 'This is a string to try'.split(' ')[::-1]:
print w,
但不允许 str.split()。然后我想出了这个:
def reverse_w(txt):
tmp = []
while (txt.find(' ') >= 0):
tmp.append(txt[:txt.find(' ')])
txt = txt[txt.find(' ')+1:]
if (txt.find(' ') == -1):
tmp.append(txt)
return tmp[::-1]
答案 0 :(得分:3)
def reverse(sentence):
sentence = 'This is a string to try'
answer = ''
temp = ''
for char in sentence:
if char != ' ':
temp += char
else:
answer = temp + ' ' + answer
temp = ''
answer = temp + ' ' + answer
return answer
答案 1 :(得分:3)
这是一个O(n)实现(不使用+
连接):
def reverse_w(txt):
words = []
word = []
for char in txt:
if char == ' ':
words.append(''.join(word))
word = []
else:
word.append(char)
words.append(''.join(word))
return ' '.join(reversed(words))
这实际上实现了分割算法 - 手动将字符串拆分为单词,然后反转单词列表。
答案 2 :(得分:0)
创建一个循环,向后遍历字符串,使用字符串索引来获取每个字符。请记住,在Python中,您可以使用以下命令访问字符串:
s = "Strings!"
sOne = s[1] // == "t"
答案 3 :(得分:0)
>>> import re
>>> s = 'This is a string to try'
>>> z = re.split('\W+', s)
>>> z.reverse()
>>> ' '.join(z)
'try to string a is This'
根据要求提供一个班轮('import re'位除外):
>>> reduce(lambda x, y: u'%s %s' % (y, x), re.split('\W+', 'This is a string to try'))
u'try to string a is This'
答案 4 :(得分:0)
使用重新
import re
myStr = "Here is sample text"
print " ".join(re.findall("\S+",myStr)[::-1])
答案 5 :(得分:0)
如果允许string.partition作为替换:
def reversed_words(s):
out = []
while s:
word, _, s = s.partition(' ')
out.insert(0, word)
return ' '.join(out)
否则回退string.find:
def reversed_words(s):
out = []
while s:
pos = s.find(' ')
if pos >= 0:
word, s = s[:pos], s[pos+1:]
else:
word, s = s, ''
out.insert(0, word)
return ' '.join(out)
答案 6 :(得分:0)
在某些采访中,您在使用Python时受到限制,例如:请勿使用reversed
,[::-1]
或.split()
。
在这些情况下,Python 2.7
中的以下代码可以使用(从Darthfett上面的答案中采用):
def revwords(sentence):
word = []
words = []
for char in sentence:
if char == ' ':
words.insert(0,''.join(word))
word = []
else:
word.append(char)
words.insert(0,''.join(word))
return ' '.join(words)
答案 7 :(得分:0)
最简单的程序,不使用任何内置方法:
def reverse(sentence):
answer = ''
temp = ''
for char in sentence:
if char != ' ':
temp += char
continue
rev = ''
for i in range(len(temp)):
rev += temp[len(temp)-i-1]
answer += rev + ' '
temp = ''
return answer + temp
reverse("This is a string to try")
答案 8 :(得分:-3)
编辑:好吧,如果允许str.split
,那就是这个;-)或者,你可以编写自己的分割版本。
>>> s = 'This is a string to try'
>>> r = s.split(' ')
['This', 'is', 'a', 'string', 'to', 'try']
>>> r.reverse()
>>> r
['try', 'to', 'string', 'a', 'is', 'This']
>>> result = ' '.join(r)
>>> result
'try to string a is This'
有三个步骤:按空格分割,用单词反转列表,并将字符串列表连接到一个字符串,中间有空格。