首页 > 解决方案 > 如何按顺序计算字母类型?

问题描述

我正在尝试按顺序计算字母/输入。

总而言之,我想要一个简单的系统,我可以在其中输入“L,L,L,L,R,L,R,L,A,A”(我知道这可能是可识别的)但我希望它输出类似

4 Ls, 1 R, 1 L, 1 R, 1 L, 2 As

我的代码现在看起来像这样。

def countTheL(word, char='.L,'):
    count = 0
    for c in word:
        if c == char:
            count += 1
    return count

(我有相同的 Rs、As 和 Fs 代码)所有这些都是检查有多少。它没有按顺序告诉你。

我还有另一个问题,如果这封信连接了一个句号,那么它就会被作废并删除,但这可以稍后解决。

标签: python

解决方案


您可以使用itertools模块提供的功能(尽管一开始自己尝试一下也不错):

from itertools import groupby

data = ['L','L','L','L','R','R.', 'R.','L','R','A.','L','A','A']
output = []

for key, group in groupby(data):
    if not (key[-1] == '.'):
        output.append(str(len(list(group))) + key)

print(data)
print(output)

我也添加了以句号结尾的字母,所以它具有代表性。

groupbykey, group object创建可迭代元素的组并将它们作为对返回给您。key是您的列表元素,因此带有句号的字母将被单独处理(它们与裸字母不同)。这在if语句中使用 - 如果字母以句号结尾,则代码会跳过它。更好的说法是,如果没有,那么它会继续 - 并附加一个字符串,该字符串是组的大小和键 - 字母。

这个版本还添加了一个s如果组中有多个字母,

from itertools import groupby

data = ['L','L','L','L','R','R.', 'R.','L','R','A.','L','A','A']
output = []

for key, group in groupby(data):
    if not (key[-1] == '.'):
        group_len = len(list(group))
        if group_len == 1:
            output.append('1' + key)
        else:
            output.append(str(group_len) + key + 's')

print(data)
print(output)

推荐阅读