Python String: Как разобрать строку и найти конкретный индекс String?

Я хочу создать список кортежей, где я хочу:

  • первый элемент кортежа = индекс алфавита
  • второй элемент кортежа = индекс пробела перед следующим алфавитом
# String
input= "M   i     n        d"

# List of tuple
output = [(0, 3), (4, 9), (10, 18), (19, 19)]

Я смог написать эту логику (с ошибкой в ​​последнем кортеже), но чувствую, что должен быть более умный способ написать это. Любая идея?

string = "M   i     n        d"
coltuple = []


for a in string:

    if a.isalpha() == True:
        start = string.index(a)
        next_string = string[(start + 1) :]

        for b in next_string:

            if b.isalpha() == True:
                end = string.index(b) - 1
                print("End:", end)
                break

        coltuple += [(start, end)]

print(coltuple)

Всего 2 ответа


Это можно решить с помощью модуля re .

import re

L = []
string = "M   i     n        d"

pat = re.compile(r'S+s*')

for token in pat.finditer(string):
    L.append((token.start(), token.end()-1))

print(L)

Печать:

[(0, 3), (4, 9), (10, 18), (19, 19)]

Если вы собираетесь использовать эти значения для индексации строки, вам лучше использовать token.end() а не token.end()-1 .

Примечание: убраны круглые скобки из обычного опыта. Это был r'(S+s*)


Вот что я придумал:

inputString= "M   i     n        d"

alphaIndexes = []
alphaTuples = []

# Loop over range based on length of input
for i in range(0, len(inputString)):
    # if its alpha
    if inputString[i].isalpha() == True:
        print("Alpha at {}".format(i))
        # append it to list of indexes
        alphaIndexes.append(i)

# Loop over range based on length of all found alphas
# minus one since we will create pairs
for i in range(0, len(alphaIndexes)-1):
    # Append to list o alpha tuples tuple of
    # current index and next index but substract that next one by one
    alphaTuples.append((alphaIndexes[i], alphaIndexes[i+1]-1))

print(alphaTuples)

Есть идеи?

10000