使用列表推导更改嵌套列表中的第一个项目

时间:2017-06-07 16:11:16

标签: python list list-comprehension

我们说我有以下列表清单:

[['Hello im an item', 1234], ['I enjoy python', 'hello'], ['I only have one item']]

我想在每个内部列表的第一项中用下划线替换空格,所以它看起来像这样:

[['Hello_im_an_item', 1234], ['I_enjoy_python', 'hello'], ['I_only_have_one_item']]

我尝试过以下操作但没有成功:

formatted = [first[0].replace(' ', '_') for first in formatted]

格式化返回仅包含第一项的列表,但格式正确。 有谁知道如何实现这一目标?

2 个答案:

答案 0 :(得分:6)

list comprehension构建一个全新的列表,因此您需要确保该新列表包含旧列表包含的所有内容。连接每个子列表的其余部分:

formatted = [[sub[0].replace(' ', '_')] + sub[1:] for sub in formatted]

作为常规for循环,上述内容大致等同于:

_new = []
for sub in formatted:
    _element = [sub[0].replace(' ', '_')] + sub[1:]
    _new.append(_element)
formatted = _new

您可以使用常规循环就地改变列表,而不是使用列表解析:

for sub in formatted:
    sub[0] = sub[0].replace(' ', '_')

如果您绝对需要一个全新的列表,请仅使用列表推导。

答案 1 :(得分:1)

只需使用for循环:

for a in formatted:
    a[0] = a[0].replace(' ', '_')

这实际上不是列表推导的用例。