可能重複:
Reverse the ordering of words in a string如何使用python(手動)反轉字符串中的單詞?
我知道有一些蟒蛇已經提供了這種方法,但我想知道這些方法是如何工作的,當你只擁有基礎要使用的列表數據結構。如果我有一個字符串hello world
,並且我想創建一個新的字符串world hello
,我會怎麼想?
然後,如果我可以用一個新的列表來做它,我將如何避免做一個新的列表,並做到這一點?
可能重複:
Reverse the ordering of words in a string如何使用python(手動)反轉字符串中的單詞?
我知道有一些蟒蛇已經提供了這種方法,但我想知道這些方法是如何工作的,當你只擁有基礎要使用的列表數據結構。如果我有一個字符串hello world
,並且我想創建一個新的字符串world hello
,我會怎麼想?
然後,如果我可以用一個新的列表來做它,我將如何避免做一個新的列表,並做到這一點?
原來的答案
from array import array
def reverse_array(letters, first=0, last=None):
"reverses the letters in an array in-place"
if last is None:
last = len(letters)
last -= 1
while first < last:
letters[first], letters[last] = letters[last], letters[first]
first += 1
last -= 1
def reverse_words(string):
"reverses the words in a string using an array"
words = array('c', string)
reverse_array(words, first=0, last=len(words))
first = last = 0
while first < len(words) and last < len(words):
if words[last] != ' ':
last += 1
continue
reverse_array(words, first, last)
last += 1
first = last
if first < last:
reverse_array(words, first, last=len(words))
return words.tostring()
使用list
答案來匹配更新問題
def reverse_list(letters, first=0, last=None):
"reverses the elements of a list in-place"
if last is None:
last = len(letters)
last -= 1
while first < last:
letters[first], letters[last] = letters[last], letters[first]
first += 1
last -= 1
def reverse_words(string):
"""reverses the words in a string using a list, with each character
as a list element"""
characters = list(string)
reverse_list(characters)
first = last = 0
while first < len(characters) and last < len(characters):
if characters[last] != ' ':
last += 1
continue
reverse_list(characters, first, last)
last += 1
first = last
if first < last:
reverse_list(characters, first, last=len(characters))
return ''.join(characters)
除了重命名,唯一的利益變化是最後一行。
str = "hello world"
" ".join(str.split()[::-1])
你能解釋一下這裏的邏輯嗎?另外,正如問題中所指出的那樣,我試圖理解使用數組來做這件事的基礎知識。含義以'str ='hello world'開頭,然後創建一個數組並反轉這些單詞。 – locoboy
該字符串被拆分爲具有內置函數的單詞。使用'[ - - 1]'片段反轉分裂列表,按照您詢問的其他問題和鏈接副本中的解釋。然後將相反的單詞列表與空格連接在一起。請注意單詞'list'。在Python中,一個數組是非常不同的。 –
Split the string,使reverse iterator然後join
零件回來。
' '.join(reversed(my_string.split()))
如果你所關心的多個空格,改變split()
到split(' ')
按照要求,我從CPython的源代碼的最古老的可下載版本發佈分裂的實現(通過GVR自己:Link)
def split(s,whitespace=' \n\t'):
res = []
i, n = 0, len(s)
while i < n:
while i < n and s[i] in whitespace:
i = i+1
if i == n:
break
j = i
while j < n and s[j] not in whitespace:
j = j+1
res.append(s[i:j])
i = j
return res
我覺得現在有這樣做(也許GROUPBY的更Python的方式)和t他原來的源有一個bug(if i = n:
,corrrected到==
)
你有一個字符串:
str = "A long string to test this algorithm"
分割字符串(在字邊界 - 無參數split
):
splitted = str.split()
反轉獲得的陣列 - 使用範圍或函數
reversed = splitted[::-1]
連接所有帶空格的單詞 - 也稱爲加入。現在
result = " ".join(reversed)
,你並不需要那麼多的臨時工,它們合併成一個行給出:
result = " ".join(str.split()[::-1])
我不明白爲什麼這是downvoted。它通過OP想要澄清的現有答案的步驟,並達到相同的正確結果。 –
@KarlKnechtel:他們都是不錯的答案,除非不回答問題 - 他們都沒有使用數組。 –
[This SO question](http:// stackoverflow。com/questions/1009160/reverse-the-ordering-in-a-string)有你的答案和一些Python代碼 –
你永遠不能做到這一點,因爲字符串是不可變的 – JBernardo
@JBernardo:可能他爲什麼要問爲'數組'。 –