python-3.x 如何更改所有子列表的特定索引处的元素?

hm2xizp9  于 2023-01-22  发布在  Python
关注(0)|答案(5)|浏览(116)

我列了一个清单:[[1, 2, 3], [4, 5, 6]]
我想使用列表解析将其更改为[[1, None, 3], [4, None, 6]]
我试过:

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

2j4z5cfb

2j4z5cfb1#

问题中显示的数据是由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个,则此操作将失败

myzjeezk

myzjeezk2#

在代码中应该是:

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

这当然会创建一个新列表

x6h2sr28

x6h2sr283#

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

6ljaweal4#

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

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

ego6inou5#

如果要使用嵌套列表解析结构

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

相关问题