Объяснение
Вы не можете получить индекс и SeqRecord в списке, потому что «Сравнение SeqRecord намеренно не реализовано» (вы получили объяснение в сообщении об ошибке - NotImplementedError ). Метод index()
возвращает самый низкий индекс в списке, в котором появляется obj. Но для этого необходим специальный метод сравнения c, который не реализован в модуле Seq.
Жесткий метод
Поскольку python является динамическим c языком, вы может добавить в класс метод сравнения. Даже сообщение об ошибке дает ответ ( Явно сравните интересующие атрибуты ). Вот код:
from Bio.SeqRecord import SeqRecord
def equal_seqs(self, other):
if not isinstance(other, SeqRecord):
raise NotImplementedError('Comparsion on wrong types!')
else:
return self.seq == other.seq # You can change it to whatever you want.
SeqRecord.__eq__ = equal_seqs
foo = SeqRecord('ATGCGCAT')
bar = SeqRecord('GACGATCA')
print(foo == bar)
# False
l = [foo, bar]
print(l.index(bar))
# 1
Другая возможность
Я не знаю, правильно ли я вас понял, но если вы хотите распечатать идентификатор последовательности, вы можете сделать это как следующее:
for seq in sequences:
print(f'{seq.id} {seq.name}')
Это то, что вы хотели?
Подробнее
Если вы хотите узнать больше о богатых методах сравнения, вы можете найти его здесь