在不使用内置函数的情况下,函数应在不更改“ $”位置的情况下反转字符串

时间:2018-09-12 05:30:08

标签: python python-2.7 data-structures

我需要一个Python函数,该函数可以在以下条件下提供反向字符串。

  1. $的位置在反向字符串中不应更改。
  2. 不应使用Python内置函数。
  3. 功能应该是高效的。

示例:'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

谢谢。

2 个答案:

答案 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$$'