【问题标题】:Finding an element in nested python list and then replacing it在嵌套的python列表中查找一个元素然后替换它
【发布时间】:2023-04-02 12:47:01
【问题描述】:

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

  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]];`

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

谢谢

【问题讨论】:

标签: python python-3.x list nested-lists


【解决方案1】:

使用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]]

【讨论】:

  • 奇特的解决方案!但是我觉得导入整个库对于您可以在没有导入的情况下用四行执行的操作来说有点矫枉过正......
  • 是的,但这是最有效的解决方案。但是对于这个任务,一个普通的列表方法就可以完成这项工作。
  • 真的,我想这真的取决于他们列表的长度(以及他们是否在其他行中使用 numpy :))
【解决方案2】:

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

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

NL[1][1]='X'

输出:

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

【讨论】:

    【解决方案3】:

    假设您需要找到元素 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]]           
    

    【讨论】:

      【解决方案4】:

      这将仅替换第一次出现的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
      

      【讨论】:

        【解决方案5】:

        您应该通过索引访问元素。您有 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))
        

        输出:

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

        【讨论】:

          【解决方案6】:

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

          然后打印(NL)

          【讨论】:

            【解决方案7】:

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

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



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

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

            【讨论】:

              猜你喜欢
              • 2017-06-14
              • 1970-01-01
              • 2015-09-06
              • 2016-02-29
              • 2019-02-20
              • 2014-11-06
              • 1970-01-01
              • 2018-08-05
              • 2018-08-18
              相关资源
              最近更新 更多