V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CosimoZi
V2EX  ›  问与答

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

  •  
  •   CosimoZi · 2015-09-13 22:21:27 +08:00 · 5800 次点击
    这是一个创建于 3387 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2015-09-14 12:16:25 +08:00
    weyou
        1
    weyou  
       2015-09-13 23:04:56 +08:00
    楼主注意 ((1 ),(1 )) == (1,1 ), 不知道是不是您本意。
    我觉得你说应该是((1,),(1,))
    weyou
        2
    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
        3
    ligyxy  
       2015-09-14 01:12:30 +08:00
    @weyou 请教第二个函数有什么优点?
    mkeith
        4
    mkeith  
       2015-09-14 09:15:54 +08:00
    json.dumps 可以吗?
    weyou
        5
    weyou  
       2015-09-14 12:16:25 +08:00
    @ligyxy
    lambda 匿名递归的优点在于它可以当作参数直接传给一个函数, 而不用给他一个名字。

    比如说有个函数 foo (param1, param2, func ), 要求传入一个函数 func 来把嵌套 tuple 都转成 list 。 就可以在调用 foo 的时候直接传入上面的匿名 lambda ,而不用先赋值给 rlist 变量。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.