计算连续的字母

时间:2021-02-03 07:50:32

标签: python string count

我想计算这个字符串中有多少个连续的字母:

string=['S', 'E', 'S', 'E', 'E', 'N', 'N', 'N', 'W', 'W', 'W', 'S']

代码应返回以下内容:

[['S',1],['E',1],['S',1],['E',2],['N',3],['W',3],['S',1]]

我已经尝试了以下代码,但它没有出来。有人可以帮助我吗?谢谢

S=0
N=0
W=0
E=0
result=[]
for k in string:
    if k=='S':
        S+=1
        result.append(['S',S])
    elif k=='N':
        N+=1
        result.append(['N',N])
    elif k=='W':
        W+=1
        result.append(['W',W])    
    elif k=='E':
        E+=1
        result.append(['E',E])
print(result)

4 个答案:

答案 0 :(得分:1)

您可以使用itertools.groupby

import itertools

string=['S', 'E', 'S', 'E', 'E', 'N', 'N', 'N', 'W', 'W', 'W', 'S']

result = [[k, len(list(g))] for k, g in itertools.groupby(string)]
print(result)

输出:

[['S', 1], ['E', 1], ['S', 1], ['E', 2], ['N', 3], ['W', 3], ['S', 1]]

答案 1 :(得分:0)

您需要计算不累积的连续元素,因此为每个字符保留全局跟踪器没有用,并且不会扩展到您可以执行的新字符

string=['S', 'E', 'S', 'E', 'E', 'N', 'N', 'N', 'W', 'W', 'W', 'S']
prev = None
result=[]
for k in string:
    if prev and k == prev:
        result[-1][1]+=1
    else:
        result.append([k,1])
    prev = k
print(result)

答案 2 :(得分:0)

最好从字典类型中选择结果类型。 您的代码应如下所示:

string=['S', 'E', 'S', 'E', 'E', 'N', 'N', 'N', 'W', 'W', 'W', 'S']

S=0 
N=0 
W=0 
E=0

result = {}
for k in string:
    if k=='S': 
        S+=1 
        result['S']=S 
    elif k=='N': 
        N+=1 
        result['N']=N 
    elif k=='W': 
        W+=1 
        result['W']=W     
    elif k=='E': 
        E+=1 
        result['E']=E 

print(result)

代码执行结果如下:

{'S': 6, 'E': 6, 'N': 6, 'W': 6}

link 提供了有关 Python 中数据结构的良好信息。

祝你好运。

答案 3 :(得分:0)

此代码可以帮助您,并且没有固定字母。

string=['S', 'E', 'S', 'E', 'E', 'N', 'N', 'N', 'W', 'W', 'W', 'S']
result=[]
currentLetter=None
currentCount=0
for k in string:
    if currentLetter == None:
        currentLetter = k
        currentCount = 1  
    elif k == currentLetter:
        currentCount += 1
    
    if currentLetter != None and k != currentLetter:
        result.append([currentLetter, currentCount])
        currentLetter = k
        currentCount = 1
result.append([currentLetter, currentCount])
print(result)

您可以像在代码中一样导航数组,并且:

  • 第一次找到字母 (currentLetter == None) 时设置字母并开始计数。
  • 当您找到不同的字母 (k != currentLetter) 时,将这对字母 ([currentLetter, currentCount]) 添加到结果中,更改 currentLetter 并重置 currentCount
  • 最后,将最后一个字母添加到结果中并打印出来。

结果将是: [['S', 1], ['E', 1], ['S', 1], ['E', 2], ['N', 3], ['W', 3], ['S', 1]]

相关问题