忽略python元组的一部分

Jim*_*ies 40 python tuples iterable-unpacking

如果我有一个像这样的元组,(1,2,3,4)并且我想将1和3分配给变量a和b,我可以明显地说

myTuple = (1,2,3)
a = my_tuple[0]
b = myTuple[2]
Run Code Online (Sandbox Code Playgroud)

或类似的东西

(a,_,b,_) = myTuple
Run Code Online (Sandbox Code Playgroud)

有没有办法可以解压缩值,但忽略它们中的一个或多个?

NPE*_*NPE 55

我个人会写:

a, _, b = myTuple
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的习语,因此它被广泛理解.我发现语法清晰.

  • 我想要注意,在python解释器中,`_`被赋值给最后一个表达式的结果(所以如果你输入''hi'并按Enter键然后`_是'hi'`),直到你做了类似的事情.你在其中为它分配一个值,然后它将永远不会像以前那样工作. (9认同)
  • @ 2rs2ts出于完整性考虑:当本地分配的变量_离开范围时,例如,当封闭函数结束时,`_将照常工作,它将再次正常工作。为了强迫这种情况在程序中的某个特定点发生,可以使用`del _`。这会显式删除您本地定义的变量“ _”,从而不显示全局值“ _”。 (2认同)

eya*_*ler 27

您可以用来*_捕获未知数量的元素。

first, *_, one_before_last, _ = 1,2,3,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)

给出:

first = 1   
one_before_last = 8
Run Code Online (Sandbox Code Playgroud)

  • 只有Python 3 (6认同)

Bog*_*dan 14

在我看来,你的解决方案很好.如果您确实在分配_时遇到问题,那么您可以定义索引列表并执行:

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


Spa*_*set 7

请注意,您可以对源元组进行切片,如下所示:

a,b = some_tuple[0:2]
Run Code Online (Sandbox Code Playgroud)