使用Python查找文件中列表的重复次数

2 投票
3 回答
535 浏览
提问于 2025-04-17 03:53

我需要找出列表中某个条目连续重复的次数。例如,考虑下面这个文件:

"hello hello [A B C]"
"my world [D C F L]"
"tick tock [A L]"

在这个文件中,字母C连续重复的次数是2次。
字母A没有被算作重复,因为它没有连续出现。

我不太确定使用re模块,因为它不能告诉我是否是连续重复。希望能得到一些帮助。

3 个回答

0

如果你想在把重复的东西放到一个列表里后进行计数,可以使用以下方法:

initial_length = len(my_list)
new_length = len(set(my_list))
duplicates = initial_length - new_length
0

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、数据库或者文件。为了让程序能够理解这些数据,我们通常需要对它们进行一些处理和转换。

比如说,如果我们从用户那里获取了一个数字,但这个数字是以字符串的形式存在的(也就是用引号包起来的),我们就需要把它转换成真正的数字,这样程序才能进行计算。这种转换的过程就叫做“类型转换”。

在不同的编程语言中,类型转换的方法可能会有所不同,但大致的思路都是一样的。我们需要告诉程序:“嘿,这个东西其实是个数字,你可以用它来做数学运算。”

此外,有时候我们还需要将数字转换成字符串,特别是在需要显示给用户看的时候。比如说,我们想把一个数字显示在网页上,这时就需要把它变成字符串形式。

总之,类型转换是编程中非常常见的一种操作,掌握它可以帮助我们更好地处理数据,让程序运行得更加顺利。

def find_repeats_in_list(lines):
    # get lists from every line
    all_items = []
    for line in lines:
        open_bracket = line.index('[')
        close_bracket = line.index(']')
        items = line[open_bracket+1:close_bracket].split()
        all_items.append(items)

    # initialize dictionaries to hold consecutive counts
    counts = dict()
    final = dict()

    # seed counts with list from first line
    for item in all_items[0]:
        counts[item] = 1

    # check for first line list items in subsequent lines
    for items in all_items[1:]:
        for counted in counts:
            remove = []
            if counted not in items:      # not in current line, stop counting
                remove.append(counted)
                if counts[counted] > 1:   # but put in final if more than one
                    final[counted] = counts[counted]
        for item in remove:
            del counts[item]
        for item in items:                # now increment anything consecutive
            if item in counts:
                counts[item] += 1
    return final
1

最简单的方法就是用正则表达式来解析文件。

可以用的正则表达式是:\[([A-Z]\s)+[A-Z]\]

接下来,把得到的“列表字符串”(也就是像["[A B C]","[ F G R]"]这样的格式)转换成一个列表。

格式需要像这样处理:“[A B C]”变成“ABC”,所以要去掉空格和方括号。

converted_string_list = list(str_list)

这样打印出来的converted_string_list,对于像“ADF”这样的字符串,结果会是一个类似于这个的列表:

['A', 'D', 'F']

然后把所有的列表合并起来,找出重复的项。

这个方法很简单明了!我相信还有更好的方法。

撰写回答