繁体   English   中英

在嵌套的 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]];`

我在尝试找到元素的 position 然后更改它时遇到了麻烦。 任何帮助深表感谢。

谢谢

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

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

NL[1][1]='X'

Output:

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

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

以下代码替换所有匹配元素(所有出现的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)
        lst[index] = # your replacement for item_to_replace
        break
    except ValueError:
        continue

您应该通过索引访问元素。 您有 2D 列表(数组),因此您应该使用 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))

Output:

>>> 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)

我在尝试找到元素的 position 然后更改它时遇到了麻烦。

这里的大多数答案似乎都错过了那部分,并假设您拥有position。



您可以使用嵌套列表推导:

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)

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM