python 里,怎么把一个 tuple 里嵌套 tuple 的结构转换成 list 里嵌套 list 或者相反?

2015-09-13 22:21:27 +08:00
 CosimoZi

比如((1 ),(1 ))变成[[1],[1]]。
如果嵌套层数已知而且不是太多还可以用有限的 for 循环 list.append 解决,但是感觉这样好 low ,而且一定有更好的方法我不知道。求教。

5804 次点击
所在节点    问与答
5 条回复
weyou
2015-09-13 23:04:56 +08:00
楼主注意 ((1 ),(1 )) == (1,1 ), 不知道是不是您本意。
我觉得你说应该是((1,),(1,))
weyou
2015-09-13 23:22:40 +08:00
# 递归实现
rlist = lambda t: [rlist (tt ) for tt in t] if isinstance (t, tuple ) else t
rlist (((1,),(1,(1,2,3,(4,5 )))))

# 更学术点, 匿名 lambda
rlist = lambda t, self=lambda t, self: [self (tt, self ) for tt in t] if isinstance (t, tuple ) else t: self (t, self )
rlist (((1,),(1,(1,2,3,(4,5 )))))

请不要吐槽我的变量名,随手写的
ligyxy
2015-09-14 01:12:30 +08:00
@weyou 请教第二个函数有什么优点?
mkeith
2015-09-14 09:15:54 +08:00
json.dumps 可以吗?
weyou
2015-09-14 12:16:25 +08:00
@ligyxy
lambda 匿名递归的优点在于它可以当作参数直接传给一个函数, 而不用给他一个名字。

比如说有个函数 foo (param1, param2, func ), 要求传入一个函数 func 来把嵌套 tuple 都转成 list 。 就可以在调用 foo 的时候直接传入上面的匿名 lambda ,而不用先赋值给 rlist 变量。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX