Как найти позицию первого вхождения буквы (из алфавита) в строке? - PullRequest
0 голосов
/ 11 февраля 2020

Например, если строка

s = "##catgiraffeapluscompscI"

Как получить вывод 2, поскольку первая буква в этой строке находится в позиции 2 (c)?

Я также хочу, чтобы это работало и для разных строк (например, функции), которые могут не иметь c в качестве своей первой буквы, поэтому я не хочу

s.find('c')

Ответы [ 6 ]

1 голос
/ 11 февраля 2020

Вы можете использовать регулярное выражение для поиска первой буквы (az или AZ, используя флаг re.I), и, если найдено, вернуть значение start из объекта совпадения:

import re

def first_letter(s):
    m = re.search(r'[a-z]', s, re.I)
    if m is not None:
        return m.start()
    return -1

s = "##catgiraffeapluscompscI"
i = first_letter(s)
print(i)

Выход:

2
0 голосов
/ 11 февраля 2020

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

короткий путь, который не использует регулярные выражения:

import string
s = "##catgiraffeapluscompscI"
letters_found = [L for L in string.ascii_letters if L in s]
if letters_found:
    first_letter_position = min([s.find(L) for L in letters_found])
else:
    first_letter_position = -1
print(first_letter_position)

По сути, он создает список всех букв в вашей цели (пустой, если в цели их нет); затем для каждой буквы, которая присутствует в цели, находит первое местоположение; и берет наименьшее из этого.

Но опять же, Ник лучше, если вы знакомы с регулярными выражениями.

0 голосов
/ 11 февраля 2020

Сначала найти букву, а затем ее индекс.

>>> s.find(next(filter(str.isalpha, s)))
2
0 голосов
/ 11 февраля 2020

Извините, я потратил некоторое время на то, чтобы понять, о чем вы спрашиваете.

Следующее будет игнорировать все не-алфавитные c символы и даст вам позицию первого алфавитного c символа , используя метод isalpha ().

foo = "##catgiraffeapluscompscI"

L = len(foo)

vivi = 0
for v in range(1,L):
    if foo[vivi].isalpha():
        print ("First alphabetic character " + foo[vivi] + " at position " + str(vivi))
        break
    vivi = vivi + 1    

Вывод:

First alphabetic character c at position 2
0 голосов
/ 11 февраля 2020

Вы можете обрабатывать строку как список символов и проходить по ней, пока не найдете совпадение. Этот оператор while проверяет наличие символа, и, если он не существует, он останавливает вас, выпадая из конца списка.

s = "##catgiraffeapluscompscI"
index = 0
search_char = "c"

while (index != len(s)) and (s[index] != search_char):
    index += 1

if index == len(s):
    print("Character not in string")
else:
    print("Character is at position: ", index)
0 голосов
/ 11 февраля 2020
def find_index(input_string,input_value):
    return input_string.index(input_value))
answer = find_index("##catgiraffeapluscompscI", 'c')
print(answer)
...