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
上面的代码表明了我想要做的事情。
是否可以获得在any()
方法中返回true的lst
的i
的索引,而不使用lst
上的显式for循环?如果可以,如何获得?
发布于 2018-06-08 05:10:58
你只是混淆了下标变量的作用域。使用index
方法尝试一种更直接的方法:
a = [['df','37s',''],['4d','34','jd']]
target = ''
for lst in a:
if target in lst:
print(lst.index(target))
输出:
2
发布于 2018-06-08 05:17:14
现在,您已经更改了问题描述(请注意,示例输出确实很有帮助),尝试下面的列表理解:
print([pos for pos, lst in enumerate(a) if target in lst])
输出:
[0]
这表明a是唯一包含空字符串的元素。
如果我将输入测试扩展到
a = [['df','37s',''],
['4d','34','jd'],
['one','','more', 'try']]
输出为
[0, 2]
发布于 2018-06-08 05:49:26
严格地回答最初的问题:是否有可能在any()中获得返回true的索引,而不进行显式的for。嗯,这是可能的。但这并不意味着你应该这么做。请不要在生产中使用此代码,它依赖于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
https://stackoverflow.com/questions/50750120
复制相似问题