在嵌套的 python 列表中查找一个元素然后替换它

Finding an element in nested python list and then replacing it

我有一个嵌套列表,我正在尝试用其他内容替换列表中的某个元素。

  NL = [[1,2,3],
       [4,5,6],
       [7,8,9]];

现在,我需要更新列表,假设用户想要将 NL[1][1](即 5)处的元素更改为 'X'。

NL 将更新为

  NL = [[1,2,3],
       [4,'X',6],
       [7,8,9]];`

我在尝试找到元素的位置然后更改它时遇到问题。非常感谢任何帮助。

谢谢

使用 2 个索引,1 个用于您想要的嵌套列表,一个用于您想要的嵌套列表的元素。

所以在这种情况下,您需要第二个列表的第二个元素:

NL[1][1]='X'

输出:

[[1, 2, 3], [4, 'X', 6], [7, 8, 9]]

假设您需要找到元素 5 并想将其替换为 10。 我们遍历外部列表,然后遍历每个内部列表的元素。一旦找到要查找的元素,就可以用索引替换它。一旦找到匹配的元素,我们就使用枚举来获取索引。

以下代码替换所有匹配元素(所有出现的 5)。

NL = [[1,2,3], [4,5,6], [7,8,9]]

print(NL)  # prints: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for i, sublist in enumerate(NL):
    for y, element in enumerate(sublist):
        if element == 5:
            NL[i][y] = 10

print(NL)  # prints: [[1, 2, 3], [4, 10, 6], [7, 8, 9]]           

使用numpy

NL = np.array(NL)

mask = np.where(NL == 5)
NL[mask] = 10

array([[ 1,  2,  3],
       [ 4, 10,  6],
       [ 7,  8,  9]])

解决方案2:

def get_index(num, List):
    for row, i in enumerate(List):
        if num in i:
            return row, i.index(num)
    return -1

idx = get_index(5,NL)
if idx>0:
    NL[idx[0]][idx[1]] = 7

[[1, 2, 3], [4, 7, 6], [7, 8, 9]]

这将仅替换第一次出现的 item_to_replace。如果您希望它替换所有子列表,请从 try 块中删除 break 语句。

item_to_replace = 5
for lst in NL:
    try:
        index = lst.index(item_to_replace)
        <b>lst[index] = # your replacement for item_to_replace</b>
        break
    except ValueError:
        continue
</pre>
		

您应该通过索引访问元素。你有二维列表(数组)所以你应该使用 2 个索引:NL[1][1] = "X".

完整代码:

NL = [[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]

print("Original: {}".format(NL))

NL[1][1] = "X"

print("New: {}".format(NL))

输出:

>>> python3 test.py
Original: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
New: [[1, 2, 3], [4, 'X', 6], [7, 8, 9]]

只需使用 NL[1][1] = 'X'

然后打印(NL)

I am having trouble trying to find the position of the element and then changing it.

这里的大部分答案似乎都遗漏了那部分,并假设您拥有职位。



您可以使用嵌套列表理解:

NL = [[1,2,3],
      [4,5,6],
      [7,8,9]]

NL = [['X' if i==5 else i for i in j] for j in NL]

print(NL)

输出:

[[1, 2, 3],
 [4,'X',6],
 [7, 8, 9]]