ternary operator with unpacking - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: ternary operator with unpacking (/thread-15179.html) |
ternary operator with unpacking - joaomcteixeira - Jan-07-2019 Hello, After using ternary operators extensively I am getting lost in this case. It took me a couple of hours to understand why I was getting bugged, and though I've identified the cause I can't understand why this example works like this. # pretty clear a = [("1", "2"), ("", "")] b, c = list(zip(*a)) print(b) print(c) ('1', '') ('2', '') # here I would expect the same as before, however... a = [("1", "2"), ("", "")] b, c = list(zip(*a)) if True else [""], [""] print(b) print(c) [('1', ''), ('2', '')] [''] # this result is expected but why it differs from the second? a = [("1", "2"), ("", "")] b, c = list(zip(*a)) if True else ([""], [""]) print(b) print(c) ('1', '') ('2', '')Would someone be willing to comment on this? EDIT: after posting the thread and staring at it, a spark came... ternary operator ended with the comma... so [""] was passed to c even when condition evaluates to True RE: ternary operator with unpacking - buran - Jan-07-2019 Note that the result of this expression list(zip(*a)) if True else [""] will always be [the result of] first part - list(zip(*a)) because your condition is explicit True , i.e. you are not evaluating the truthfulness of the first part. More over with given value of a the first part will be considered True in any case.In the second example, on the right hand side you have implicit tuple with first element being list(zip(*a)) if True else [""] and the second element is [""] . During the unpacking they are assigned to b and c respectively.In the third example the right hand side ultimately ends being list(zip(*a)) - i.e. the first part of the ternary operator as explained at the top of this post. And it's unpacked accordingly into b and c.
RE: ternary operator with unpacking - joaomcteixeira - Jan-07-2019 Yes, the CONDITION being True is just for example. I didn't mean to say I explicitly write True there. Yes, then I realised that in the ternary expression giving "," ends it and unpacks differently. I will correct my examples to avoid confusion. RE: ternary operator with unpacking - buran - Jan-07-2019 (Jan-07-2019, 12:26 PM)joaomcteixeira Wrote: Yes, the CONDITION being True is just for example. I didn't mean to say I explicitly write True there.Sorry, I misunderstood that part RE: ternary operator with unpacking - perfringo - Jan-08-2019 Just for fun: Guido van Rossum in Python-Dev list Quote:Pleas stop calling it 'ternary expression'. That doesn't explain According to PEP308 Python has conditional expression :-) RE: ternary operator with unpacking - joaomcteixeira - Jan-08-2019 Jeje, Thanks for sharing the info and the links , let's go for conditional expression. Best |