2015-08-09 4 views
0

У меня есть эта функция, которая принимает слово и перечисляет индекс каждой буквы:Как получить индекс нескольких вхождений одного и того же символа в строке?

def capitals(word): 
    print word 
    lst = [] 
    for i in word: 
     if i.isupper(): 
      lst += [word.index(i)] 
    return lst 

Когда все заглавные буквы в слове различны, он работает нормально. Пример:

столицы ("AuIkkdjsiP") возвращает [0,2,9]

Однако, если строка имеет дублированные столицы, это происходит:

столицы ("AuAskdjfIsjUsdhA ") возвращает [0,0,10,0]

Как получить индекс других вхождений символа« А »при итерации строки?

+1

Используйте 'enumerate()' и итерации по индексу и символу. –

+0

После 'import re',' [match.start() для соответствия в re.finditer ('[AZ]', "AuAskdjfIsjUsdhA")] '==>' [0, 2, 8, 11, 15] ' – Harvey

ответ

3

Вы хотите enumerate для обработки повторяющихся символов, вы можете также использовать list comprehension:

def capitals(word): 
    return [i for i, ch in enumerate(word) if ch.isupper()] 

ch является каждый символ в слове, i является индекс полукокса.

На другой ноте, если вы хотите добавить один элемент в список следует добавить не +=, если у вас есть несколько элементов, чтобы добавить это имеет смысл +=/extend но для одного элемента просто добавьте:

def capitals(word): 
    print word 
    lst = [] 
    for i,ch in enumerate(word): 
     if ch.isupper(): 
      lst.append(i) 
    return lst 
+1

Спасибо, это правильно, что я искал! – Maslor

+1

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

+0

Я видел, как это случалось иногда, как только кто-то помещает сообщение как дубликат, люди автоматически начинают голосование, даже не читая вопрос: / – Maslor

Смежные вопросы