我想计算这个字符串中有多少个连续的字母:
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)
答案 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]]