Search code examples
pythonprintinggeneratorgenerator-expression

Incorrect format of generator expression? python


I'm trying to change several if and else statements into generator expressions and for some reason it gives me an error.

So my if and else statement is this..

sequence = 'CTGAGTAGC'
reference = 'ATGACTGCC'

for seq, ref in zip(sequence,reference):
    if seq == ref:
        print seq,'-',ref
    else:
        print seq,' ',ref

I've tried above if and else statement into this generator expression..

tmp = (seq,'-',ref if seq==ref else seq,' ',ref for seq,ref in zip(sequence,reference))
print tmp

and it gives me an error like this:

tmp = (seq,'-',ref if seq==ref else seq,' ',ref for seq,ref in zip(sequence,reference))
                                                  ^
SyntaxError: invalid syntax

Solution

  • You need to disambiguate the tuples in the expression:

    tmp = ((seq, '-', ref) if seq == ref else (seq, ' ', ref)
           for seq, ref in zip(sequence, reference))
    

    or even

    tmp = ((seq, '-' if seq == ref else ' ', ref)
           for seq, ref in zip(sequence, reference))
    

    Demo:

    >>> sequence = 'CTGAGTAGC'
    >>> reference = 'ATGACTGCC'
    >>> tmp = ((seq, '-' if seq == ref else ' ', ref)
    ...        for seq, ref in zip(sequence, reference))
    >>> for tup in tmp:
    ...     print tup
    ... 
    ('C', ' ', 'A')
    ('T', '-', 'T')
    ('G', '-', 'G')
    ('A', '-', 'A')
    ('G', ' ', 'C')
    ('T', '-', 'T')
    ('A', ' ', 'G')
    ('G', ' ', 'C')
    ('C', '-', 'C')