首页 > python多维元组如何全部转换成列表

python多维元组如何全部转换成列表

代码如下:

a = ((1,2,3),(4,5,6,),(7,8,9))
b = list(a)
print b
for c in b:
    c = list(c)
    print c
print b

想把这个多维元组变成[[1,2,3],[4,5,6],[7,8,9]]
输出结果如下,仍然无法实现这种效果:
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

怎样才能将多维元组,全部转换成列表?


非常感谢大家的帮助,问题解决了,我来说说我的理解,如果有不对的地方,还请指正:
在使用for从序列中得到的每一个对象,事实上都是从原序列中复制了一份。因此对此对象进行处理时,只是处理了复制体,并没有影响到原序列。
如果需要对原序列做修改,有很多方法,下面是在评论中看到的一个比较简单易想的:

a = ((1,2,3),(4,5,6,),(7,8,9))
b = list(a)
print b
for c in b:
    b[b.index(c)] = list(c)
    print c
print b

即直接对原序列进行更换,运行结果如下:

[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
(1, 2, 3)
(4, 5, 6)
(7, 8, 9)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

任意维度的tuple,稍作修改可以适应任意list, iterable:

def flatten(xs):
    for x in xs:
        if isinstance(x, tuple):
            for xx in flatten(x):
                yield xx
        else:
            yield x


a = ((1,2,3),(4,5,6,),(7,8,9))
print list(flatten(a))

a = ((1, 2, 3),((4, 5), (6)), ((7, 8, 9)))
print list(flatten(a))

有一个非常轻量级也非常经典与方便的python库,叫jerk,只有4个api,对于这种类型转换的问题,用起来非常方便。一楼利用map处理是非常方便与得体的。但是若对于更加复杂或者其他的情况,则不好弄。
a = ( (1, 2, 3), 1, 2, 3, (1, (1, 1), set([1, 2])), {1: 'tutorial'} )
对于这类数值类型转换问题,使用jerk中的xlist即可。
(jerk 的四个api分别是:xlist, xtuple, xint, xlen)

    #先来安装jerk库
    $ pip install jerk

    #使用jerk中xlist的范例
    $ python
    >>> from jerk import *
    >>> a = ( (1, 2, 3), 1, 2, 3, (1, (1, 1), set([1, 2])), {1: 'tutorial'} )
    >>> print xlist(a)
    >>> [[1, 2, 3], 1, 2, 3, [1, [1, 1], set([1, 2])], {1: 'tutorial'}]

关于jerk的地址是Tutorial on github.


也凑个热闹吧 :)

a = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
b = []
for i in range(len(a)):
    b.append(list(a[i]))
print b

>>> a = ((1,2,3),(4,5,6,),(7,8,9))
>>> print map(list, a)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

a = ((1,2,3),(4,5,6,),(7,8,9))
b = list(a)
b[:] = [list(c) for c in b]
print b
【热门文章】
【热门文章】