2016-12-01 10 views
-1

Я хочу, чтобы найти значение второго наиболее последовательного появления письма «C» из заданной строкипоиск Количество второй макс подряд буквы из строки

й = «SSSSEEEECCCCEE CCCCCCCCC SSSSEEECCCCSSSSSSSEEESS CCCCCCC SEESSSSCCCCCCSSEEEE»

В верхней строке первая жирная «C» является наиболее последовательной «C» в полосе. Я хочу найти вторую полосу. Он может быть такой же длины, как у первой.

я следующий код:

st = 'SSSSEEEECCCCEECCCCCCCCCSSSSEEECCCCSSSSSSSEEESSCCCCCCCSEESSSSCCCCCCSSEEEE' 
import re 
print "counts_of_C :",list(len(s) for s in re.findall(r'C+', st)) 
print "first _max : ",max(len(s) for s in re.findall(r'C+', st)) 

Выход:

counts_of_C : [4, 9, 4, 7, 6] 
first_max_value_of_C : 9 

То, что я хочу, чтобы найти второго максимум отсчета "C" (второй наиболее последовательное появление C здесь является).

Я могу статически получать это значение из списка подсчета здесь, но я ищу любой другой способ сделать это.

+1

'сортирован ([4, 9, 4, 7, 6]) [1]' – furas

+2

Что делать, если появляется максимум два раза, например, '[4, 9, 4, 9, 6]'? –

+1

@AlexHall В случае повторных максимумов результат должен зависеть от вашего собственного конкретного требования, не так ли? – mikeqfu

ответ

1

Это поможет вам второй максимальное количество сортировкой набор:

print "counts_of_C :",sorted(set(len(s) for s in re.findall(r'C+', st)))[-2] 
1

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

st = 'SSSSEEEECCCCEECCCCCCCCCSSSSEEECCCCSSSSSSSEEESSCCCCCCCSEESSSSCCCCCCSSEEEE' 
import re 
occurrences = [len(s) for s in re.findall(r'C+', st)] 
sorted_ = sorted(occurrences, reverse=True) 
print "counts_of_C : %s"% occurrences 
print "first _max %d, second highest: %d" % (sorted_[0], sorted_[1]) 

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

  • Нет связанных вопросов^_^