首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果使用python中的any()方法条件为真,则返回列表的索引

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

Stack Overflow用户
提问于 2018-06-08 05:03:42
回答 3查看 39关注 0票数 0
代码语言:javascript
复制
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的lsti的索引,而不使用lst上的显式for循环?如果可以,如何获得?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:10:58

你只是混淆了下标变量的作用域。使用index方法尝试一种更直接的方法:

代码语言:javascript
复制
a = [['df','37s',''],['4d','34','jd']]
target = ''
for lst in a:
    if target in lst:
       print(lst.index(target))

输出:

代码语言:javascript
复制
2
票数 5
EN

Stack Overflow用户

发布于 2018-06-08 05:17:14

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

代码语言:javascript
复制
print([pos for pos, lst in enumerate(a) if target in lst])

输出:

代码语言:javascript
复制
[0]

这表明a是唯一包含空字符串的元素。

如果我将输入测试扩展到

代码语言:javascript
复制
a = [['df','37s',''],
     ['4d','34','jd'],
     ['one','','more', 'try']]

输出为

代码语言:javascript
复制
[0, 2]
票数 2
EN

Stack Overflow用户

发布于 2018-06-08 05:49:26

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档