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循环,如果怎么样?
答案 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