如何更改所有子列表的特定索引的元素?



我有一个这样的列表:[[1, 2, 3], [4, 5, 6]]

我想用列表推导把它改成[[1, None, 3], [4, None, 6]]

I have try:

print(list(x[1] = None for x in [[1, 2, 3], [4, 5, 6]]))

抛出错误SyntaxError: expression cannot contain assignment, perhaps you meant "=="

我也试过:

print(list(x1 for x in [[1, 2, 3], [4, 5, 6]] for x1 in x))

但这只是给[1, 2, 3, 4, 5, 6]

我已经思考了大约1个小时,有人知道如何将我的代码输出更改为[[1, None, 3], [4, None, 6]]吗?

问题中显示的数据是由2个子列表组成的列表,每个子列表包含3个元素。

让我们假设它是每个子列表中的第二个值,应该用None替换,并且子列表的长度可能不同。在这种情况下:

_list = [[1,2,3],[4,5,6]]
new_list = [[x, None, *y] for x, _, *y in _list]
print(new_list)

输出:

[[1, None, 3], [4, None, 6]]

现在让我们将数据更改为:

_list = [[1, 2, 3], [4, 5, 6, 7]]

…然后,同样的列表推导式将生成:

[[1, None, 3], [4, None, 6, 7]]

注意:

如果任何子列表包含少于2个元素

在代码中应该是:

[[None if i==1 else v for i,v in enumerate(l)] for l in [[1,2,3], [4,5,6]]]

这当然会创建一个新的列表

l=[[1,2,3],[4,5,6]]
[[a, None, c] for a,b,c in l]
#[[1, None, 2], [4, None, 5]]

如果您想要就地更改原始列表:

l = [[1, 2, 3], [4, 5, 6]]
for sub in l:
sub[1] = None
print(l)
# [[1, None, 3], [4, None, 6]]

如果您想使用嵌套列表推导结构

[[k[i] if i != 1 else None for i in range(len(k))] for k in [[1,2,3],[4,5,6]]]
# [[1, None, 3], [4, None, 6]]

最新更新