我们说我有以下列表清单:
[['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]
格式化返回仅包含第一项的列表,但格式正确。 有谁知道如何实现这一目标?
答案 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(' ', '_')
这实际上不是列表推导的用例。