Ignore part of a python tuple
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]
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, 2021Comments
-
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 saymyTuple = (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 over 8 yearsI'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 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 usedel _
; this explicitly deletes your locally defined variable,_
, which unmasks the global value,_
. -
Ataxias over 2 yearsCorrect, but I'd clarify that this only works for Python3.
-
o17t H1H' S'k over 2 yearsthere is only python 3
-
Ataxias over 2 yearsYour 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).