如何在Python 3中获取列表中的列表编号?

Mah*_*lam 2 python list python-3.x

我试图获取包含特定数字的嵌套列表的编号.这是我的代码:

listo = [[1,2],[3,4,5]]
for x in listo:
    if 3 in x:
       print(len(x))
Run Code Online (Sandbox Code Playgroud)

我想在这里得到的是嵌套列表的数量,其中包含3个.我的代码返回3因为我是函数len,它只返回嵌套列表中具有该数字的项目数.输出应该是:

2
Run Code Online (Sandbox Code Playgroud)

由于数字3位于第二个嵌套列表中.计数从1开始,而不是0.

如何获得正确的输出?

Ev.*_*nis 6

使用枚举:

listo = [[1,2], [3,4,5]]

res = next(i for i, sublist in enumerate(listo) if 3 in sublist)
print(res)  # -> 1
Run Code Online (Sandbox Code Playgroud)

注意Python是0-index languange; 列表中的第一个元素的索引号为0.这就是上面的代码返回的原因1.如果你想获得2,那么,只需添加1,或者更好,使用startenumerate(enumerate(listo, 1))的可选参数.

要制作上述防错1,您可以指定在3不在任何子列表中的情况下返回的默认值.

res = next((i for i, sublist in enumerate(listo) if 3 in sublist), 'N\A')
Run Code Online (Sandbox Code Playgroud)

除非提供默认值,否则如果耗尽迭代而没有找到要返回的内容,则会next引发1.StopIteration


Aus*_*tin 5

使用enumerate指定起始值为1:

listo = [[1,2],[3,4,5]]
for i, x in enumerate(listo, 1):
    if 3 in x:
        print(i)

# 2
Run Code Online (Sandbox Code Playgroud)

  • `枚举(listo,1)`而不是`i + 1` (2认同)
  • 这种方法不会短路.添加一个`break` (2认同)