如何理解在python中制作列表中的列表推导?

时间:2015-04-29 12:13:51

标签: python list list-comprehension

我有一个元组列表,它将被转换到另一个包含列表类型元素的列表,因为每个元素都是一个列表,我们可以在头部插入自然数。我们来吧:

    l = [('c++', 'compiled'), ('python', 'interpreted')]
    lx = []
    for z in xrange(len(l)):
        y = [x for x in l[z]]
        y.insert(0, z)
        lx.append(y)
    print lx
    [[0, 'c++', 'compiled'], [1, 'python', 'interpreted']]

看,完成工作,它以这种方式工作。除以下任何一项外

既不:

    l = [('c++', 'compiled'), ('python', 'interpreted')]
    lx = []
    for z in xrange(len(l)):
        y = [x for x in l[z]]
        lx.append(y.insert(0, z))
    print lx
    [None, None]

也:

    l = [('c++', 'compiled'), ('python', 'interpreted')]
    lx = []
    for z in xrange(len(l)):
        y = [x for x in l[z]].insert(0, z)
        lx.append(y)
    print lx
    [None, None]

更不用说了:

    l = [('c++', 'compiled'), ('python', 'interpreted')]
    lx = []
    for z in xrange(len(l)):
        lx.append([x for x in l[z]].insert(0, z))
    print lx
    [None, None]

作品,为什么?我注意到了:

y = [x for x in l[z]]

在调试中逐步执行一个周期执行,这超出了我对其他语言表达的印象。

1 个答案:

答案 0 :(得分:5)

insert方法不会返回任何内容,这在Python中等同于返回None常量。所以,例如在这一行之后:

y = [x for x in l[z]].insert(0, z)

y 始终None。这就是你追加lx的结果。你的第一个片段是正确的方法。这个问题与列表推导无关。