使用Python查找文件中列表的重复次数
我需要找出列表中某个条目连续重复的次数。例如,考虑下面这个文件:
"hello hello [A B C]"
"my world [D C F L]"
"tick tock [A L]"
在这个文件中,字母C连续重复的次数是2次。
字母A没有被算作重复,因为它没有连续出现。
我不太确定使用re
模块,因为它不能告诉我是否是连续重复。希望能得到一些帮助。
3 个回答
如果你想在把重复的东西放到一个列表里后进行计数,可以使用以下方法:
initial_length = len(my_list)
new_length = len(set(my_list))
duplicates = initial_length - new_length
在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、数据库或者文件。为了让程序能够理解这些数据,我们通常需要对它们进行一些处理和转换。
比如说,如果我们从用户那里获取了一个数字,但这个数字是以字符串的形式存在的(也就是用引号包起来的),我们就需要把它转换成真正的数字,这样程序才能进行计算。这种转换的过程就叫做“类型转换”。
在不同的编程语言中,类型转换的方法可能会有所不同,但大致的思路都是一样的。我们需要告诉程序:“嘿,这个东西其实是个数字,你可以用它来做数学运算。”
此外,有时候我们还需要将数字转换成字符串,特别是在需要显示给用户看的时候。比如说,我们想把一个数字显示在网页上,这时就需要把它变成字符串形式。
总之,类型转换是编程中非常常见的一种操作,掌握它可以帮助我们更好地处理数据,让程序运行得更加顺利。
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
最简单的方法就是用正则表达式来解析文件。
可以用的正则表达式是:\[([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']
然后把所有的列表合并起来,找出重复的项。
这个方法很简单明了!我相信还有更好的方法。