【问题标题】:Using a list comprehension, insert an incrementing integer into a list of lists that contain strings使用列表推导,将递增整数插入包含字符串的列表列表中
【发布时间】:2018-10-02 00:34:06
【问题描述】:

如何将此 for 循环转换为列表理解?

在:

docs = [['a'], ['b']]
i=0
for each in docs:
    print(each.insert(0, str(i)))
    i+=1
print(docs)

出来:

[['0', 'a'], ['1', 'b']]

【问题讨论】:

    标签: string python-3.x list insert list-comprehension


    【解决方案1】:

    这取决于你是想要一个新列表还是改变旧列表:

    • [l.insert(0,str(i)) for i,l in enumerate(docs)]
    • [l.insert(0,str(i)) 或 l for i,l in enumerate(docs)]
    • [[str(i)]+docs[i] for i in range(len(docs))]

    这将改变旧列表,但只是作为副作用,“返回”列表是错误的:

    >>> x = [['a'],['b']]
    >>> [ l.insert(0,str(i)) for i,l in enumerate(x)]
    [None, None]
    >>> x
    [['0', 'a'], ['1', 'b']]
    

    这可以解决:

    >>> x = [['a'],['b']]
    >>> [ l.insert(0,str(i)) or l for i,l in enumerate(x)]
    [['0', 'a'], ['1', 'b']]
    >>> x
    [['0', 'a'], ['1', 'b']]
    >>>
    

    或者可以在不改变旧列表的情况下生成新列表:

    >>> y = [['a'],['b']]
    >>> [ [str(i)]+y[i] for i in range(len(y))]
    [['0', 'a'], ['1', 'b']]
    >>> y
    [['a'], ['b']]
    

    【讨论】:

    • 啊,我确实设法想出了你那里的第一个,但我担心它会对我的程序产生不利影响。我也观察到了直接的结果:[None, None],但随后看到 x 发生了变化(困惑,我在这里问了我的问题)。我不认为我希望在我的程序中出现“突变”,因为简单似乎更好,我将使用第三个选择设置,y = [[str(i)]+y[i] for i in range (len(y))] 这样我就没有不必要的列表堵塞 RAM - 我在实际数据集中有数百万行。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2019-12-04
    • 2019-07-19
    • 2017-11-04
    相关资源
    最近更新 更多