CosimoZi
V2EX  ›  问与答

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

  •  
  •   CosimoZi · Sep 13, 2015 · 6405 views
    This topic created in 3897 days ago, the information mentioned may be changed or developed.

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

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

    比如说有个函数 foo (param1, param2, func ), 要求传入一个函数 func 来把嵌套 tuple 都转成 list 。 就可以在调用 foo 的时候直接传入上面的匿名 lambda ,而不用先赋值给 rlist 变量。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3138 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:23 · PVG 21:23 · LAX 06:23 · JFK 09:23
    ♥ Do have faith in what you're doing.