Python 在一个列表中找到所有非的最简单的方法是什么?

Python 在一个列表中找到所有非的最简单的方法是什么?,python,Python,有没有比这段代码更好的Pythonic方法来查找列表中的所有none def find_nones_locations(lst): none_locations = [] for i in range(len(lst)): for j in range(len(lst)): if lst[i][j] is None: none_locati

有没有比这段代码更好的Pythonic方法来查找列表中的所有none

    def find_nones_locations(lst):
         none_locations = []
         for i in range(len(lst)):
              for j in range(len(lst)):
                   if lst[i][j] is None:
                        none_locations.append((i,j))
         return none_locations

您可以使用列表理解一次性完成,但我不确定它是否一定比清晰的循环更好:

none_locations = [(i, j) for i, row in enumerate(lst) for j, elem in enumerate(row) if elem is None]
理解中的嵌套循环遵循与普通代码中相同的顺序。没有理由不使用普通循环:

none_locations = []
for i, row in enumerate(lst):
    for j, elem in enumerate(row):
        if elem is None:
            none_locations.append((i, j))

对代码的唯一潜在改进是使用生成器。任何时候你都需要一个iterable的索引和值,这通常是获得它的python方法。

你可以使用
enumerate
稍微清理一下代码:

def find_nones_locations(lst):
     none_locations = []
     for i, sublst in enumerate(lst):
          for j, item in enumerate(sublist):
               if item is None:
                    none_locations.append((i,j))
     return none_locations

为什么要选中
(i,j)
?不需要,我编辑了代码而不是
范围
使用
枚举
。i、 e.
用于枚举(lst)中的i、val: