如果条件为true,则使用python中的any()方法返回列表的索引

时间:2018-06-07 21:03:42

标签: python python-3.x list

a = [['df','37s',''],['4d','34','jd']]
for lst in a:
    if any(i=='' for i in lst):
        print(lst.index(i)) # NameError: name 'i' is not defined

上面的代码表明我想做什么。

是否可以在i方法中获取返回true的lst的{​​{1}}索引,而不使用any()上的显式for循环,如果怎么样?

3 个答案:

答案 0 :(得分:5)

您只是混淆了下标变量的范围。使用index方法尝试更直接的方法:

a = [['df','37s',''],['4d','34','jd']]
target = ''
for lst in a:
    if target in lst:
       print(lst.index(target))

输出:

2

答案 1 :(得分:2)

现在您已经更改了问题描述(请注意示例输出确实有帮助),请尝试此列表理解:

print([pos for pos, lst in enumerate(a) if target in lst])

输出:

[0]

表示a [0]是唯一包含空字符串的元素。

如果我将输入测试扩展到

a = [['df','37s',''],
     ['4d','34','jd'],
     ['one','','more', 'try']]

输出

[0, 2]

答案 2 :(得分:1)

严格回答最初的问题:是否有可能获得在any()中返回true的indice,而不是明确的。 嗯,这是可能的。但这并不意味着你应该这样做。请不要在生产中使用此代码,它依赖于Cpython实现细节。改为使用Prune的答案。

a = [['df','37s',''],['4d','34','jd']]

for lst in a:
    gen = (value == '' for i, value in enumerate(lst))

    if any(gen):
        i = gen.gi_frame.f_locals['i']
        print('i=',i)
        #i= 2