Bottom Page

Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 ternary operator with unpacking
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))
('1', '')
('2', '')
# here I would expect the same as before, however...
a = [("1", "2"), ("", "")]
b, c = list(zip(*a)) if True else [""], [""]
[('1', ''), ('2', '')]
# this result is expected but why it differs from the second?
a = [("1", "2"), ("", "")]
b, c = list(zip(*a)) if True else ([""], [""])
('1', '')
('2', '')
Would someone be willing to comment on this? Smile

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
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.
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.
(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
Just for fun:

Guido van Rossum in Python-Dev list

Quote:Pleas stop calling it 'ternary expression'. That doesn't explain
what it means. It's as if we were to refer to the + operator as
'binary expression'

According to PEP308 Python has conditional expression :-)
buran likes this post
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Thanks for sharing the info and the links Cool , let's go for conditional expression.

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Why the result of "extended iterable unpacking" with set() is unpredictable? zohanlin 2 196 Jun-29-2020, 10:30 AM
Last Post: zohanlin
  Unpacking nested lists yonatan776 1 220 Apr-14-2020, 08:50 PM
Last Post: buran
  Unpacking dictionary from .xlsx as Kwargs etjkai 5 569 Dec-27-2019, 05:31 PM
Last Post: etjkai
  Tuple Unpacking HarshaliPatel 3 791 Jan-30-2019, 12:42 PM
Last Post: dukoolsharma
  unpacking error - chess gboreham 3 1,520 Apr-05-2017, 09:54 PM
Last Post: nilamo

Forum Jump:

Users browsing this thread: 1 Guest(s)