Заменить конкатенацию на соединение

У меня есть код, который приведен ниже:

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 элементы уже имеют значения до запуска этого кода.

Другие вопросы по тегам