Сравнение двух элементов списка в python - PullRequest
1 голос
/ 02 марта 2010

У меня есть два файла, которые я загрузил в списки. Содержимое первого файла выглядит примерно так:

d.complex.1
23
34
56
58
68
76
.
.
.
etc
d.complex.179
43
34
59
69
76
.
.
.
etc

Содержимое второго файла также одинаковое, но с разными числовыми значениями. Пожалуйста, рассмотрите от одного d.complex. * До другого d.complex. * Как один набор.

Теперь мне интересно сравнить каждое числовое значение из одного набора первого файла с каждым числовым значением наборов во втором файле. Я хотел бы записать, сколько раз каждое числовое значение появлялось во втором файле в целом.

Например, число 23 из d.complex.1 могло появляться 5 раз в файле 2 под разными наборами. Все, что я хочу сделать, это записать количество вхождений числа 23 в файл 2, включая все наборы файла 2.

Мой первоначальный подход состоял в том, чтобы загрузить их в список и сравнить, но я не могу этого добиться. Я искал в Google и наткнулся на наборы, но, будучи нубом с питоном, мне нужно некоторое руководство. Кто-нибудь может мне помочь?

Если вы считаете, что вопрос неясен, пожалуйста, дайте мне знать. Я также вставил полный файл 1 и файл 2 здесь:

http://pastebin.com/mwAWEcTa http://pastebin.com/DuXDDRYT

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Откройте файл с помощью функции Python open, затем выполните итерации по всем его строкам. Проверьте, содержит ли строка число, если это так, увеличьте его счет в экземпляре defaultdict, как описано здесь .

Повторите это для другого файла и сравните получившиеся данные.

1 голос
/ 02 марта 2010

Сначала создайте функцию, которая может загружать данный файл, так как вы, возможно, захотите сохранить отдельные наборы, а также захотите подсчитать вхождение каждого числа, лучше всего было бы иметь dict для всего файла, где ключи являются именами наборов, например complex.1 и т. д., для каждого такого набора сохраняйте другой набор чисел в наборе, код ниже объясняет это лучше

def file_loader(f):
    file_dict = {}
    current_set = None
    for line in f:
        if line.startswith('d.complex'):
            file_dict[line] = current_set = {}
            continue

        if current_set is not None:
            current_set[line] = current_set.get(line, 0)

    return file_dict

Теперь вы можете легко написать функцию, которая будет считать число в заданном file_dict

def count_number(file_dict, num):
    count = 0
    for set_name, number_set in file_dict.iteritems():
        count += number_set.get(num, 0)

    return count

например, вот пример использования

s = """d.complex.1
10
11
12
10
11
12"""

file_dict = file_loader(s.split("\n"))
print file_dict
print count_number(file_dict, '10')

вывод:

{'d.complex.1': {'11': 2, '10': 2, '12': 2}}
2

Возможно, вам придется улучшить загрузчик файлов, например, пропустить пустые строки, преобразовать в int и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...