Возвращение в Python после двухлетнего перерыва. Не помните лучший способ перебрать строку с начала и остановиться на определенном символе, а затем вернуть строку.

def my_string(long_string, char):

    newstr = " "
    for i in range(len(long_string)):
       if long_string[i] == char:
           # now what?

Я знаю, что мне нужно создать новую строку, а затем запустить цикл, чтобы пройти существующую строку. Но тогда я застреваю. Я знаю, что мне нужно вернуть новую строку, но я не уверен, как должна выглядеть остальная часть моего кода. Заранее спасибо за помощь.

4
Jefe 28 Авг 2017 в 19:11

6 ответов

Лучший ответ

Если вы просто хотите получить подстроку от начала длинной строки до определенного символа, вы можете просто сделать следующее:

>>> ch = 'r'
>>> s = 'Hello, world!'
>>> print(s[:s.find(ch)])
#  Hello, wo
1
Pedro von Hertwig Batista 28 Авг 2017 в 16:14

Вы можете создать список, содержащий каждый символ в строке, и просмотреть список.

mystr = raw_input("Input: ")
newStr = list(mystr)

print(newStr)

Тогда вы можете просто просмотреть список в соответствии с вашими условиями

0
JohEker 28 Авг 2017 в 16:19

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

Попробуйте это например. Настройте индексы, чтобы получить ту часть строки, которую вы хотите.

long_string[0:i]

Ответы, включающие использование .index (), не будут работать хорошо, если целевой символ не существует в строке без перехвата исключения.

1
Mark Beilfuss 28 Авг 2017 в 16:40
try:
    print d[:d.index('y')]
except ValueError:
    print d
1
akp 28 Авг 2017 в 16:29

Если символ остановки определенно находится в строке, вы можете использовать .index(), который найдет индекс первого вхождения вещи в скобках и разрезает []

string = "hello op"
stopchar = " "

newstr = string[:string.index(stopchar)]

#newstr = "hello"

Если вы не уверены, находится ли в строке символ остановки, вы должны использовать .find(), который не вызовет ошибку, если он не найдет символ:

newstr = string[:string.find(stopchar)]

Если вы не хотите останавливаться на первом символе и хотите получить все слова перед символом остановки, вы можете использовать следующее понимание списка:

string2 = "hello op today"
strings = [string2[:i] for i,c in enumerate(string2)
           if c == stopchar]
print (strings)

Результат:

['hello', 'hello op']
0
ragardner 28 Авг 2017 в 16:29

Я думаю, что split работает лучше, чем index (возвращает ошибку, если символ не найден) или find (возвращает -1, если символ не найден).

>>> s,c='Who fwamed wodgew wabit?','w'
>>> s.split(c)[0]
'Who f'
>>> c='r'
>>> s.split(c)[0]
'Who fwamed wodgew wabit?' 

Объяснение: split возвращает список слов в строке , используя sep в качестве строки-разделителя. Возвращая первый элемент, это работает точно так, как указано.

0
agtoever 28 Авг 2017 в 17:32