gpt4 book ai didi

python - 解包和重新打包元组 (Python 2.x)

转载 作者:太空狗 更新时间:2023-10-30 02:26:08 25 4
gpt4 key购买 nike

我编写了一个接受、工作并返回简单、非嵌套元组的函数。

例如:

myfun((1,2,3,4)):
... -> logic
return (1,2,3,4) -> the numbers can change, but the shape will be the same

因为该逻辑仅适用于单维元组,但在概念上对于每个嵌套级别都是相同的。我想知道是否有办法将像 ((1,2,(3,)),(4,)) 这样的嵌套元组转换成普通的 (1,2,3, 4) 然后再转换回((1,2,(3,)),(4,))

基本上我想要的是解压一个通用输入元组,使用它,然后将结果打包成与给定元组相同的形状。

是否有一种 Pythonic 的方式来完成这样的任务?

解包可能可以通过递归来解决,但是我不确定“重新打包”部分。

最佳答案

拆包并不难:

def unpack(parent):
for child in parent:
if type(child) == tuple:
yield from unpack(child)
else:
yield child

例如,可以做到这一点。

重新打包有点棘手。我想出了以下,它有效但不是很 pythonic,恐怕:

def repack(structured, flat):
output = []
global flatlist
flatlist = list(flat)
for child in structured:
if type(child) == tuple:
output.append(repack(child, flatlist))
else:
output.append(flatlist.pop(0))

return tuple(output)

示例用法是:

nested = ((1, 2, (3,)), (4,))
plain = tuple(unpack(nested))
renested = repack(nested, plain)

希望这对您有所帮助!

关于python - 解包和重新打包元组 (Python 2.x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045182/

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