Заменить конкатенацию на соединение
У меня есть код, который приведен ниже:
for pileupcolumn in samfile.pileup(max_depth = 1000000) :
X.append(pileupcolumn.n)
for pileupread in pileupcolumn.pileups:
if (pileupread.alignment.mapping_quality <= 15):
continue
if not pileupread.is_del and not pileupread.is_refskip:
if pileupread.alignment.query_qualities[pileupread.query_position] < 30:
# Skip entries with base phred scores < 10
continue
if pileupread.alignment.is_reverse: #negative
ReverseList[pileupcolumn.pos] += pileupread.alignment.query_sequence[pileupread.query_position]
else:
ForwardList[pileupcolumn.pos] += pileupread.alignment.query_sequence[pileupread.query_position]
Приведенный выше код отнимает много времени, и я хочу заменить конкатенацию в 11-й и 13-й строке соединением. Есть ли способ сделать это?
1 ответ
Вместо того, чтобы объединять, собирайте значения в список, затем присоединяйтесь к списку в конце цикла.
for pileupcolumn in samfile.pileup(max_depth = 1000000) :
X.append(pileupcolumn.n)
forward = []
reverse = []
for pileupread in pileupcolumn.pileups:
if (pileupread.alignment.mapping_quality <= 15):
continue
if not pileupread.is_del and not pileupread.is_refskip:
if pileupread.alignment.query_qualities[pileupread.query_position] < 30:
# Skip entries with base phred scores < 10
continue
if pileupread.alignment.is_reverse: #negative
reverse.append(pileupread.alignment.query_sequence[pileupread.query_position])
else:
forward.append(pileupread.alignment.query_sequence[pileupread.query_position])
ReverseList[pileupcolumn.pos] += ''.join(reverse)
ForwardList[pileupcolumn.pos] += ''.join(forward)
Я все еще использую конкатенацию в конце, потому что эта оптимизация работает только для for pileupread
петля. Если разные pileupcolumn
объекты имеют одинаковое pos
нам нужно объединить в этой точке. Нам также нужно это объединение, если ReverseList
элементы уже имеют значения до запуска этого кода.