Нахождение количества повторов внутри списка в файле с Python - PullRequest
2 голосов
/ 07 октября 2011

Мне нужно узнать, сколько раз запись в списке повторяется последовательно.Например, рассмотрим следующий файл

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

. В этом файле число повторений C равно 2
Повтор не учитывается, поскольку он не повторяется последовательно.

Iя не уверен в использовании re, поскольку он не скажет мне, если он повторяется последовательно.Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 07 октября 2011

самый простой способ - использовать re для анализа файла.

регулярное выражение, которое может работать: \ [([AZ] \ s) + [AZ] \]

затемсо списком «строки списка» (aka ["[ABC]", "[FGR]"]) преобразовать его в список.

формат должен быть таким же, как для "[ABC]" "ABC", поэтому удалите пробелы и [] для каждого из них.

converted_string_list = list(str_list)

, чтобы при выводе файла convert_string_list был получен список, подобный этому, для строки типа" ADF ":

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

затем объедините весь список и найдите дубликаты.

это прямое решение!Я уверен, что существует лучшее решение

0 голосов
/ 07 октября 2011
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
0 голосов
/ 07 октября 2011

Для подсчета дубликатов, как только вы внесете их в список:

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