#python #printing #python-3.x
#python #печать #python-3.x
Вопрос:
Я пытаюсь печатать на Python 3 и у меня возникают проблемы. В моем коде есть цикл for, который выглядит следующим образом:
seq = input("enter DNA sequence to search: ")
pat = re.compile('(.{10})(ATC.{3,6}CAG)')
li = []
output_lines = []
for mat in pat.finditer(seq):
x = mat.end()
li.append(mat.groups() (seq[x:x 10],))
for u in li:
z = u[1]
A = z.count('A')
C = z.count('C')
G = z.count('G')
T = z.count('T')
sumbases = [A,C,G,T]
print(sumbases)
Когда я печатаю sumbases
, я получаю это, например:
[1, 2, 3, 4]
[2, 0, 1, 4]
Я пытаюсь отформатировать вывод следующим образом:
[1, 2, 3, 4],[2, 0, 1, 4]
Кто-нибудь может показать мне проблему? Заранее спасибо.
Комментарии:
1. Это не результат этого кода. Он будет печатать точно
A,C,G,T
и перевод строки за итерацию. Я бы предпочел, чтобы вы опубликовали свой реальный код или, по крайней мере, соответствовали примерам.2. Спасибо, извините, я не включил весь код. Я вижу, что вопрос неясен.
3. @delnan я отредактировал свой пост, включив в него весь код.
4. Вам следует рассмотреть возможность использования встроенного оптимизированного
collections.Counter
средства.5. Кажется, цель
li.append(mat.groups() (seq[x:x 10],))
состоит в том, чтобы также захватить следующие десять символов, почему бы просто не добавить третью группу захвата, чтобы явно сопоставить их:'(.{10})(ATC.{3,6}CAG)(.{10})'
. Тогда, я думаю, вы можете просто написатьli = re.findall(pat, seq)
…
Ответ №1:
Вы можете попробовать это:
output_lines = []
for u in li:
z = u[1]
A = z.count('A')
C = z.count('C')
G = z.count('G')
T = z.count('T')
sumbases = "A,C,G,T" # I suppose you format it here differently
y = sumbases.replace("n"," ") # not sure why you need this
# print(y) # don't print now, print later...
output_lines.append(y)
print(','.join(output_lines))
ОТРЕДАКТИРУЙТЕ свой отредактированный вопрос:
seq = input("enter DNA sequence to search: ")
pat = re.compile('(.{10})(ATC.{3,6}CAG)')
output_lines = []
for mat in pat.finditer(seq):
x = mat.end()
z = (mat.groups() (seq[x:x 10],)[1]
output_lines.append(str([z.count(a) for a in 'ACGT')]))
print(','.join(output_lines))
Комментарии:
1. Не обращайте внимания на мое
print(y, end=',')
предложение — оно добавляет уродливую запятую в конце. Это лучше, хотя было бы еще лучше, если бы весь цикл можно было свернуть в выражение генератора.2. спасибо за помощь. я не думаю, что оператор print поддерживается в python 3 с этим синтаксисом? когда я пытаюсь это сделать, я получаю ошибку?
3. @sebrowns — извините, просто заключите это в квадратные скобки (см. Мой отредактированный ответ). Кроме того, если вы напишете «Я получаю ошибку» на stackoverflow.com затем попробуйте включить это в свой комментарий.
4. @sebrowns это верно. Этот пример предназначен для Python 2. Но все еще не ясно, каков ваш фактический код.
5. отлично. думаю, теперь я начинаю понимать. однако я получаю синтаксическую ошибку из output_lines в предпоследней строке.