我需要一个Python函数,该函数可以在以下条件下提供反向字符串。
$
的位置在反向字符串中不应更改。示例:'pytho$n'
结果:'nohty$p'
我已经尝试过使用此代码:
list = "$asdasdas"
list1 = []
position = ''
for index, i in enumerate(list):
if i == '$':
position = index
elif i != '$':
list1.append(i)
reverse = []
for index, j in enumerate( list1[::-1] ):
if index == position:
reverse.append( '$' )
reverse.append(j)
print reverse
谢谢。
答案 0 :(得分:0)
编写此代码时不使用任何内置函数。希望它符合您的条件-
string = "zytho$n"
def reverse(string):
string_new = string[::-1]
i = 0
position = 0
position_new = 0
for char in string:
if char=="$":
position = i
break
else:
i = i + 1
j = 0
for char in string_new:
if char=="$":
position_new = i
break
else:
j = j + 1
final_string = string_new[:position_new]+string_new[position_new+1:position+1]+"$"+string_new[position+1:]
return(final_string)
string_new = reverse(string)
print(string_new)
此输出为-
nohty$x
为了向您解释代码,首先我使用了[::-1],它只是占据字符串的最后位置并向前移动以使字符串反向。然后我在新旧字符串中都找到了$的位置。我发现了一个数组形式的头寸,以防万一您有多个$。但是,我想当然地认为您只有一个$存在,因此将数组的[0]索引也取了。接下来,我使用四件事缝制字符串:新字符串的一部分直到$符号,新字符串的一部分从美元符号之后到旧字符串中$符号的位置,然后是$符号,然后是其余的新字符串。
答案 1 :(得分:0)
认识到它是Quicksort算法的分区步骤的变体,因此使用了两个指针(数组索引):
data = list("foo$barbaz$$")
i, j = 0, len(data) - 1
while i < j:
while i < j and data[i] == "$": i += 1
while i < j and data[j] == "$": j -= 1
data[i], data[j] = data[j], data[i]
i, j = i + 1, j - 1
"".join(data)
'zab$raboof$$'
P.S。用Python编写代码真是太可笑了!
Pythonic解决方案可能如下所示:
def merge(template, data):
for c in template:
yield c if c == "$" else next(data)
data = "foo$barbaz$$"
"".join(merge(data, reversed([c for c in data if c != "$"])))
'zab$raboof$$'