2016-08-04 1 views
1

J'ai un tableau d'en-tête contenant trois éléments. Mon programme passe en revue toutes les combinaisons d'en-têtes et voit s'ils sont concurrents ou non.Impression de chaînes et de variables sur la même ligne

Lorsque j'exécute le programme, je veux qu'il imprime les deux en-têtes qui sont concurrents et ceux qui ne sont pas concurrents. Donc, fondamentalement, lors de l'impression, au lieu de l'impression sequences are concurrent/sequences are not concurrent, je veux dire header a is concurrent to header b et header b is not concurrent to header c etc.

Ceci est mon programme tel qu'il est:

c=combinations(header,2) 
for p in combinations(sequence,2): 
    if p[0][start:stop]==p[1][start:stop]: 
     print header[p[0],p[1]], "are concurrent" 
    else: 
     print header[p[0],p[1]], "are not concurrent" 
print list(c) 

Je sais que le problème est la quatrième ligne et six. S'il vous plaît aider. Avec ce code, je reçois TypeError: list indices must be integers, not tuple.

Quelqu'un a demandé un exemple de mes en-têtes et des séquences ... Mes têtes sont les suivantes: ('> DQB1', '> OMIXON', '> GENDX')

Mes séquences sont les suivantes: ('GACTAAAAAGCTA', 'GACTAAAAAGCTA', 'GAAAACTGGGGGA')

+1

est pas tête juste '[p [0]], en-tête [p [1]], ... '? –

+0

Qu'en est-il de 'en-tête d'impression [p [0]]," est concurrent de ", en-tête [p [1]]'? Cela aiderait si vous fournissiez des exemples de ce que 'header' et' sequence' sont – BusyAnt

+0

cette erreur signifie que 'p [0], p [1]' n'est pas un entier, et 'header []' n'acceptera qu'un int (si header est une liste) – pwnsauce

Répondre

2

Vous souhaitez combiner les deux listes en une seule:

for (h1, s1), (h2, s2) in combinations(zip(header, sequence), 2): 
    if s1[start:stop] == s2[start:stop]: 
     print h1, h2, "are concurrent" 
    else: 
     print h1, h2, "are not concurrent" 

ou pour réduire le code en double:

for (h1, s1), (h2, s2) in combinations(zip(header, sequence), 2): 
    concurrent = s1[start:stop] == s2[start:stop] 
    print "{} and {} are{} concurrent".format(h1, h2, "" if concurrent else " not") 
+0

Ou simplement 'print h1, h2, 'sont' si s1 [start: stop] == s2 [start: stop] sinon 'ne sont pas', 'concurrent''. – arekolek

0

la meilleure façon de chaînes de format dans Python est comme ceci:

"{} and {} are concurrent".format(header[p[0]],header[p[1]]) 

Il est également possible d'utiliser plusieurs espaces réservés {}.

+0

Non, ce n'est pas le cas. –

+0

comment pourriez-vous savoir? Je pense que 'p [X]' n'est pas un int de toute façon – pwnsauce

+0

Maintenant vous êtes bien :) bien qu'avec les multiples marques vous pouvez réellement faire '" {0 [{p [0]}]} et {1 [{p [1]}]} sont concurrentes ".format (en-tête, p = p)" mais maintenant que je l'écris, il semble horriblement illisible, alors ne le faites pas. –