форматирование печати в python 3

#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 в предпоследней строке.