2017-02-11 2 views
4

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

my_text = "one? two three??" 

Я хочу, чтобы посчитать только количество? в конце строки. Вышеуказанное должно возвращать 2 (а не 3).

То, что я пытался до сих пор:

my_text.count("?") # returns 3 
+0

Это не дубликат. Этот вопрос действительно неясен, даже если их название похоже, и они требуют того же ответа. – Optimus

ответ

9

Там не встроенный метод для этого. Но что-то простое, как это следует сделать трюк:

>>> len(my_text) - len(my_text.rstrip('?')) 
2 
1

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

import re 

def count_trailing_question_marks(text): 
    last_question_marks = re.compile("\?*$") 
    return len(last_question_marks.search(text).group(0)) 

print count_trailing_question_marks("one? two three??") 
# 2 
print count_trailing_question_marks("one? two three") 
# 0 
0

Не так чистый, но простой способ:

my_text = "one? two three??" 

total = 0 
question_mark = '?' 
i = 0 
for c in my_text: 
    i -= 1 
    if my_text[i] == question_mark: 
     total += 1 
    else: 
     break 
0

One-liner используя мои любимые itertools:

Сначала переверните строку, затем продолжите ее (принимая значения), пока наше условие выполнено (значение == '?'). Это возвращает итерируемый, который мы исчерпываем в список и, наконец, занимаем его длину.

len(list(itertools.takewhile(lambda x:x=='?',reversed(my_text)))) 
Смежные вопросы