gpt4 book ai didi

python - 如何将长度为 n 的元组解压缩为 m
转载 作者:IT老高 更新时间:2023-10-28 20:38:17 26 4
gpt4 key购买 nike

在 Python 3 中,我可以执行以下操作(另见 PEP3132 关于扩展可迭代解包):

a, *b = (1, 2, 3)
# a = 1; b = (2, 3)

如何在 Python 2.x 中实现同样的优雅?


我知道我可以使用单元素访问和切片操作,但我想知道是否有更多的 pythonic 方式。到目前为止我的代码:

a, b = (1, 2, 3)[0], (1, 2, 3)[1:]
# a = 1; b = (2, 3)

最佳答案

我发现相关的PEP3132还给出了 Python 2.x 的一些示例:

Many algorithms require splitting a sequence in a "first, rest" pair:

first, rest = seq[0], seq[1:]

[...]

Also, if the right-hand value is not a list, but an iterable, it has to be converted to a list before being able to do slicing; to avoid creating this temporary list, one has to resort to

it = iter(seq)
first = it.next()
rest = list(it)

这个问题的答案中给出的其他方法:

函数参数列表解包方法

需要额外的函数定义/调用:

def unpack(first, *rest): 
return first, rest
first, rest = unpack( *seq )

我想知道为什么它是在解包函数参数列表中实现的,而不是在正常的元组解包中实现。

生成器方法

Credits .还需要自定义函数实现。 first 变量的数量更灵活一些。

def unpack_nfirst(seq, nfirst):
it = iter(seq)
for x in xrange(nfirst):
yield next(it, None)
yield tuple(it)
first, rest = unpack_nfirst(seq, 1)

我猜,最 Python 的可能是上面 PEP 中提到的那些?

关于python - 如何将长度为 n 的元组解压缩为 m<n 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10299682/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com