2016-12-01 85 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]) 
相关问题