如何按顺序计算字母类型?

2024-09-29 22:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在按顺序数数字母/输入

总而言之,我想要一个简单的系统,在这里我可以输入“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的相同代码)所有这些只是检查有多少。它没有按顺序告诉你

我还有另一个问题,如果这封信有一个句号,那么它将被作废和删除,但这可以在以后解决


Tags: 代码inforif顺序系统defas
3条回答

这应该起作用:

i = 'L,L,L,L,R,L,R,L,A,A'
letters = i.split(',')

count = 0
result = ''
for n in range(len(letters)):
     count += 1
     if n == len(letters) - 1:
         result += f'{count}{letters[n]}'
         if count > 1:
             result += 's'
     elif letters[n] != letters[n+1]:
         result += f'{count}{letters[n]}'
         if count > 1:
             result += 's, '
         else:
             result += ', '
         count = 0

In [46]: result
Out[46]: '4Ls, 1R, 1L, 1R, 1L, 2As'

我们不需要为每个字母都使用函数,只需要使用一个函数,它将一次一个字母地遍历字符串,并检查它是否与前一个字母相同

如果是同一个字母,我们将临时计数器增加1。 如果没有,则重置计数器,并将计数器值与字母一起存储在临时数组中

在函数结束时,它将使用临时数组并通过它进行解析,以连续输出每个字母在字符串中的次数

您可以使用我编写的代码:


def countTheLetters(input_string):

    arr = input_string.split(',')

    curr_letter = arr[0]
    count = 1

    counter_arr = []
    if (len(input_string) > 1):
        for i in range(1, len(arr)):
            if curr_letter == arr[i]:
                count += 1
            else:
                counter_arr.append({"Letter": curr_letter, "Count": count})
                count =1

            if i == len(arr) - 1:
                counter_arr.append({"Letter": arr[i], "Count": count})
            curr_letter = arr[i]

        for letter_counted in counter_arr:
            print(str(letter_counted["Count"]) + " " + str(letter_counted["Letter"]))
    else:
        print("1 " + input_string)

countTheLetters("L,L,L,L,R,L,R,L,A,A")

这是这段代码的输出:

4 L
1 R
1 L
1 R
1 L
2 A

编辑:我修改了代码,以便能够处理字符串长度为1或2的情况

您可以使用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)

我还加了以句号结尾的字母,所以它很有代表性

groupby创建iterable元素的组,并将它们作为key, 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)

相关问题 更多 >

    热门问题