2016-12-01 80 views
-1

我想從給定的字符串從字符串第二個最大的連續字母查找計數

ST = 「SSSSEEEECCCCEE CCCCCCCCC SSSSEEECCCCSSSSSSSEEESS CCCCCCC SEESSSSCCCCCCSSEEEE」找到的字母「C」第二個最連續發生的價值

在上面的字符串中,第一個粗體「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

'sorted([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]) 
相關問題