当前位置:  开发笔记 > 编程语言 > 正文

如何在列表中获取项目的位置?

如何解决《如何在列表中获取项目的位置?》经验,为你挑选了4个好方法。

我在列表上进行迭代,如果符合某个条件,我想打印出项目的索引.我该怎么做?

例:

testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
    if item == 1:
        print position

Charlie Mart.. 269

嗯.这里有一个列表理解的答案,但它已经消失了.

这里:

 [i for i,x in enumerate(testlist) if x == 1]

例:

>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]

更新:

好的,你想要一个生成器表达式,我们将有一个生成器表达式.这是for循环中的列表理解:

>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
...     print i
... 
0
5
7

现在我们将构建一个发电机......

>>> (i for i,x in enumerate(testlist) if x == 1)

>>> for i in (i for i,x in enumerate(testlist) if x == 1):
...     print i
... 
0
5
7

并且足够好,我们可以将它分配给变量,并从那里使用它...

>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
... 
0
5
7

并认为我曾经写过FORTRAN.



1> Charlie Mart..:

嗯.这里有一个列表理解的答案,但它已经消失了.

这里:

 [i for i,x in enumerate(testlist) if x == 1]

例:

>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]

更新:

好的,你想要一个生成器表达式,我们将有一个生成器表达式.这是for循环中的列表理解:

>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
...     print i
... 
0
5
7

现在我们将构建一个发电机......

>>> (i for i,x in enumerate(testlist) if x == 1)

>>> for i in (i for i,x in enumerate(testlist) if x == 1):
...     print i
... 
0
5
7

并且足够好,我们可以将它分配给变量,并从那里使用它...

>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
... 
0
5
7

并认为我曾经写过FORTRAN.


我认为你的意思是"单一字母",坦率地说,在这个例子中更长的名字将没有更多的信息内容.
经过25年的功能编程质疑,我想我终于得到了线索.列表理解是炸弹.
谢谢你的回答.我认为@nailer的评论可能与你在生成器示例中的一行中在两个不同的上下文中使用'i'这一事实有关; 一个在理解中,另一个在迭代中.我知道它把我扔了一秒钟.

2> mmj..:

以下怎么样?

print testlist.index(element)

如果您不确定要查找的元素是否实际位于列表中,您可以添加初步检查,例如

if element in testlist:
    print testlist.index(element)

要么

print(testlist.index(element) if element in testlist else None)

或者"pythonic方式",我不太喜欢,因为代码不太清楚,但有时效率更高,

try:
    print testlist.index(element)
except ValueError:
    pass


而不是在访问之前进行测试,您也可以尝试检查`ValueError`

3> zdan..:

使用枚举:

testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
    if item == 1:
        print position



4> jakber..:
for i in xrange(len(testlist)):
  if testlist[i] == 1:
    print i

xrange而不是请求的范围(请参阅注释).


我同意python 2程序中的大型列表.请注意,'range'仍然可以在python 3中工作(并且像xrange IIRC一样工作).'xrange'正在走向恐龙之路.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有