Ignore part of a python tuple

32,605

Solution 1

Your solution is fine in my opinion. If you really have a problem with assigning _ then you could define a list of indexes and do:

a = (1, 2, 3, 4, 5)
idxs = [0, 3, 4]
a1, b1, c1 = (a[i] for i in idxs)

Solution 2

I personally would write:

a, _, b = myTuple

This is a pretty common idiom, so it's widely understood. I find the syntax crystal clear.

Solution 3

you can use *_ to capture an unknown number of elements e.g.

first, *_, one_before_last, _ = 1,2,3,4,5,6,7,8,9

gives:

first = 1
one_before_last = 8

Solution 4

Note that you can slice the source tuple, like this instead:

a,b = some_tuple[0:2]
Share:
32,605
Jim Jeffries
Author by

Jim Jeffries

Software developer - mostly working with ruby, javascript and mongoDB at the moment, but have experience with Java, C#, C++, Oracle, Postgres, SQL Server and Python and dabble in Neo4J, Clojure, Haskell, Scala, Go and whatever else takes my fancy.

Updated on October 16, 2021

Comments

  • Jim Jeffries
    Jim Jeffries over 2 years

    If I have a tuple such as (1,2,3,4) and I want to assign 1 and 3 to variables a and b I could obviously say

    myTuple = (1,2,3,4)
    a = myTuple[0]
    b = myTuple[2]
    

    Or something like

    (a,_,b,_) = myTuple
    

    Is there a way I could unpack the values, but ignore one or more of them of them?

  • 2rs2ts
    2rs2ts over 8 years
    I'd like to note that in the python interpreter _ is assigned to the result of the last expression (so if you type 'hi' and hit enter then _ is 'hi') until you do something like this in which you assign a value to it, then it will never work as it did before.
  • CrepeGoat
    CrepeGoat about 6 years
    @2rs2ts for completeness: _ will work again as it usually does when your locally-assigned variable _ leaves scope, e.g., when an enclosing function ends. To force this to happen at a specific point in your program, you can use del _; this explicitly deletes your locally defined variable, _, which unmasks the global value, _.
  • Ataxias
    Ataxias over 2 years
    Correct, but I'd clarify that this only works for Python3.
  • o17t H1H' S'k
    o17t H1H' S'k over 2 years
    there is only python 3
  • Ataxias
    Ataxias over 2 years
    Your above statement is demonstrably false. Whether we like it or not, there exist myriads of legacy codes using Python2, and it would be helpful to know what is backward compatible and what isn't (that's why IDE's offer exactly this information).