我只需要反轉每個單詞中的字母。單詞和非字母符號的順序必須保持在它們的位置。我有一個函式,但它改變了單詞的位置。
def reverse_string(st):
stack = []
for el in st:
if el.isalpha():
stack.append(el)
result = ''
for el in st:
if el.isalpha():
result = stack.pop()
else:
result = el
return result
輸入字串:
b3ghcd hg#tyj%h
預期的輸出字串:
d3chgb hj#ytg%h
uj5u.com熱心網友回復:
你真的很親近!您的代碼不起作用,因為您將還原應用于整個字串,而不是一次只做一個單詞。但只需添加一個額外的步驟,將輸入字串拆分為空格(我假設空格是定義輸入中的單詞),您將獲得所需的結果:
def reverse_string(st):
return ' '.join(reverse_word(word) for word in st.split())
def reverse_word(st):
stack = []
for el in st:
if el.isalpha():
stack.append(el)
result = ''
for el in st:
if el.isalpha():
result = stack.pop()
else:
result = el
return result
instr = 'b3ghcd hg#tyj%h'
print(reverse_string(instr)) # prints 'd3chgb hj#ytg%h'
注意:您可以使用一些內置的串列理解函式對您的代碼進行一點 Python 化。在這種情況下,您將替換stack.
stack = []
for el in st:
if el.isalpha():
stack.append(el)
對于以下之一:
stack = [el for el in st if el.isalpha()]
要么
stack = list(filter(str.isalpha, st))
uj5u.com熱心網友回復:
使用您提供的功能,一種方法是:
import re
def reverse_word(st):
stack = []
for el in st:
if el.isalpha():
stack.append(el)
result = ''
for el in st:
if el.isalpha():
result = stack.pop()
else:
result = el
return result
def reverse_string(st):
return re.sub(r'\S ', lambda match: reverse_word(match.group()), st)
print(reverse_string("b3ghcd hg#tyj%h"))
# "d3chgb hj#ytg%h"
沒有經過徹底測驗,您可能希望使用 example[^\s,.?!;]或類似的而不是\S,具體取決于您正在處理的“句子”型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/451120.html
上一篇:如何在R中的paste()中使用dplyr的contains()?
下一篇:VSCode撰寫回圈
