Python Forum
ternary operator with unpacking
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ternary operator with unpacking
#1
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? 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
Reply
#2
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.
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
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.
Reply
#4
(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
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#5
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 :-)
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.
Reply
#6
Jeje,
Thanks for sharing the info and the links Cool , let's go for conditional expression.
Best
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Unpacking a dict with * or ** msrk 4 916 Dec-02-2023, 11:50 PM
Last Post: msrk
  iterate through the dict_values while unpacking the dictionary PeacockOpenminded 3 1,262 Jan-22-2023, 12:44 PM
Last Post: PeacockOpenminded
Thumbs Up Python 3 Jupyter notebook ternary plot data nicholas 0 896 Jan-21-2023, 05:01 PM
Last Post: nicholas
  Unpacking zip object Mark17 12 3,106 Mar-28-2022, 04:59 PM
Last Post: deanhystad
  unpacking list wardancer84 2 1,837 Sep-11-2021, 02:42 PM
Last Post: wardancer84
  unpacking tuple not working project_science 1 1,451 Jan-09-2021, 09:09 PM
Last Post: buran
  Unpacking a list Mark17 3 2,555 Dec-18-2020, 05:08 AM
Last Post: aajkaal
  Unpacking wheel files DavidTheGrockle 3 10,881 Dec-15-2020, 05:11 PM
Last Post: DavidTheGrockle
  how to return False in ternary condition KEYS 7 2,980 Dec-10-2020, 05:32 PM
Last Post: perfringo
  Why the result of "extended iterable unpacking" with set() is unpredictable? zohanlin 2 2,016 Jun-29-2020, 10:30 AM
Last Post: zohanlin

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020