Без использования встроенных функций функция должна перевернуть строку без изменения позиции '$' - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужна функция 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 голосов
/ 12 сентября 2018

Признайте, что это разновидность шага разделения алгоритма 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$$'

PS Это пародия писать это на 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$$'
0 голосов
/ 12 сентября 2018

Написал это без использования встроенных функций.Надеюсь, что он соответствует вашим критериям -

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] массива.Затем я сшил строку обратно, используя четыре вещи: часть новой строки до знака $, часть новой строки после знака доллара до положения знака $ в старой строке, затем знак $ и послечто остальная часть новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...