如何理解python中making list的list comprehensions?

How to understand the list comprehensions in making list in python?

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

    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]]

是没有一个循环执行在一步步debug,只是超出了我对其他语言表达的印象

insert 方法不 return 任何东西,在 Python 中等同于 returning None 常量。因此,例如在这一行之后:

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

y 始终None。这就是您附加到 lx 的内容,因此是结果。您的第一个片段是正确的方法。这个问题与列表理解无关。