Мой вопрос выглядит как классический, но я не могу найти точно такой же вопрос в stackoverflow. Надеюсь, мой вопрос не является дубликатом.
У меня большой файл. Файл имеет много строк и фиксированных столбцов. Меня интересуют столбцы А и В среди всех столбцов. Цель состоит в том, чтобы я хотел получить строки, где (1) значение в столбце A в строке также отображается в других строках, и (2) существует более одной строки, которая имеет такое же значение столбца A, но различное значение столбца B.
Рассмотрим следующую таблицу. Меня интересуют строки 1,3 и 5, потому что «а» появляется в 3 строках, а значения в столбце B отличаются. Напротив, я не заинтересован в строках 2 и 4, потому что «b» появляется дважды, но его соответствующее значение в столбце B всегда равно «1». Точно так же меня не интересует строка 6, потому что "c" появляется только один раз.
# A B C D
=========
1 a 0 x x
2 b 1 x x
3 a 2 x x
4 b 1 x x
5 a 3 x x
6 c 1 x x
Чтобы найти такие столбцы, я читаю все строки в файле, преобразую каждую строку с объектом, создаю список для объектов и нахожу интересные столбцы с помощью следующего алгоритма. Алгоритм работает, но требует времени для моего набора данных. Есть ли у вас какие-либо предложения, чтобы сделать алгоритм эффективным?
def getDuplicateList(oldlist):
# find duplicate elements
duplicate = set()
a_to_b = {}
for elements in oldlist:
a = elements.getA()
b = elements.getB()
if a in a_to_b:
if b != a_to_b[a]:
duplicate.add(a)
a_to_b[a] = b
# get duplicate list
newlist = []
for elements in oldlist:
a = elements.getA()
if a in duplicate:
newlist.append(a)
return newlist
p.s. Я добавлю некоторые ограничения, чтобы уточнить.
- Я использую Python 2.7
- Мне нужны "все интересные строки":
duplicate
имеет "некоторые" интересные "a" s.
- Порядок важен
- Фактически, данные являются обращениями к памяти при выполнении программы. Столбец A имеет доступ к памяти, а столбец B имеет некоторые интересующие меня условия. Если доступ к памяти имеет несколько условий во время выполнения, я хотел бы изучить последовательность доступа к памяти.