Python 在保留原始大小写的同时反转字符串中的字母(但不是非字母)
例如这句话:Python 在保留原始大小写的同时反转字符串中的字母(但不是非字母),python,python-3.x,Python,Python 3.x,例如这句话: 'God bless our brave Confederates, Lord!' ……应该是: 'Dro lseta red efnoc Evarbruossel, Bdog!' 我的代码当前为: def reversing(sentence): code = [] for l1, l2 in zip(sentence, sentence[::-1]): if l1.isalpha() and l2.isalpha():
'God bless our brave Confederates, Lord!'
……应该是:
'Dro lseta red efnoc Evarbruossel, Bdog!'
我的代码当前为:
def reversing(sentence):
code = []
for l1, l2 in zip(sentence, sentence[::-1]):
if l1.isalpha() and l2.isalpha():
l2 = l2.upper() if l1.isupper() else l2.lower()
code.append(l2)
return ''.join(code)
但这并不完全正确:
>>> reversing('God bless our brave Confederates, Lord!')
'!drol ,setaredefnoc Evarb ruo sselB doG'
我的解决方案产生了预期的效果,但它的缺点是在同一个列表上迭代两次。如果这方面的实际应用需要较长的输入,那么从执行时间的角度来看,此解决方案将不是最好的
def反转(句子):
零件=列表(句子)
代码=[]
#第一次迭代只反转字母
对于枚举,枚举中的值(部分):
character=句子[-1-枚举].lower()
如果character.isalpha():
代码追加(字符)
#第二次迭代格式化并插入非字母
对于枚举,枚举中的值(部分):
如果value.isalpha()和value.isupper():
code[enum]=code[enum].upper()
elif not value.isalpha():
代码.插入(枚举,值)
返回“”。加入(代码)
一个简单的基于堆栈和队列的解决方案
a= 'God bless our brave Confederates, Lord!'
stack=[] # to keep characters
queue=[] # to keep special chars
for i in a:
if i.isalpha():
stack.append(i)
else:
queue.append(i)
对原始字符串进行迭代,以查找并检查char是否为大写字符,以及它是否为特殊字符
string=''
for i in a:
if i.isalpha():
if i.isupper():
string += stack.pop(-1).upper() # change from lower to upper char based on original string
else:
string += stack.pop(-1).lower()
else:
string += queue.pop(0)
print(string)
输出
'Dro Lseta red efnoC Evarbruossel, Bdog!'
是否应绝对尊重大写字母?是的,例如,如果原始句子中的第一个字母是大写字母,则相反句子中的第一个字母也必须是大写字母,同样适用于lowercases@BlueSheepToken听起来不错。我更新了我的答案以反映这一点。谢谢