将一个项目(单例)的元组减少到其值

Lon*_*Rob 2 python

是否有内置方法将单例元组减少到(仅)值?

我可以使用以下函数实现此目的:

def foo(tup):
    if len(tup) == 1:
        return tup[0]
    return tup
Run Code Online (Sandbox Code Playgroud)

这会将单例减少到其值并保留非单例元组:

>>> x = (3, )
>>> foo(x)
3
>>> x = (3, 4)
>>> foo(x)
(3, 4)
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个相当低级别的任务,我敢打赌它已经潜伏在Python标准库的某个地方.功能类型让我想起numpy.squeeze但是这给我们留下了array可能不是我们想要的东西.

pok*_*oke 7

有一种内置方法可以从单元组中提取单个项目.那样就是访问它的第一个索引,即tpl[0].

但是,没有,没有内置的方法将一元组提取到单个值中,但保留所有其他元组.如果你考虑一下,这将是一种危险的操作:

你需要检查它的长度这一事实意味着你可能不知道它是一个元组还是一个不同大小的元组.这意味着你也无法分辨你的函数的返回值是什么:它可以是一个元组(任何大小不是1),或者它可能是其他东西(即一元组的值).这使得你的函数非常脆弱,因为它不再具有明确的返回类型.

虽然类似的东西len(x)可以用于元组x,len(foo(x))但很可能不是x一元组,而且里面的元素不是序列.或者list(x)将元组转换为列表; 但list(foo(x))会将其转换为列表,或将内部的任何内容转换为列表.

所以如果你考虑一下,你的功能并没有多大意义.这可能就是为什么没有"解包单值(如果有的话)"的原因.

话虽这么说,你可以解压缩任何长度(大于0)的元组的第一个值.也许这就是你真正想做的事情:

>>> x = 1,
>>> y = 2, 3
>>> z = 4, 5, 6
>>> a, *_ = x
>>> a
1
>>> b, *_ = y
>>> b
2
>>> c, *_ = z
>>> c
4
Run Code Online (Sandbox Code Playgroud)