列表中的编号元素

时间:2013-03-05 11:15:08

标签: python list

我有一个列表:

[1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1 1]

我想用大于2的值打印列表的所有元素,但也打印列表中的位置,我可以自己打印元素:

for bonds in number_of_bonds:       
    if bonds >= 2:
         print bonds

但是,如果我使用枚举,它将打印列表中的所有项目,其位置如下:

(0, 1)
(1, 1)
(2, 3)

那么这样做的正确方法是什么?

8 个答案:

答案 0 :(得分:6)

你可以做的问题

[(i, j) for i,j in enumerate(l) if j > 2]

输出:

[(2, 3),
 (3, 3),
 (4, 3),
 (5, 3),
 (6, 3),
 (7, 3),
 (8, 3),
 (9, 3),
 (10, 3),
 (11, 3),
 (12, 3),
 (13, 3),
 (14, 3),
 (15, 3)]

答案 1 :(得分:5)

lst = [1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1]
print [(i, e) for (i, e) in enumerate(lst) if e > 2]

[(2, 3),
 (3, 3),
 (4, 3),
 (5, 3),
 (6, 3),
 (7, 3),
 (8, 3),
 (9, 3),
 (10, 3),
 (11, 3),
 (12, 3),
 (13, 3),
 (14, 3),
 (15, 3)]

如果您的列表很大,更好的方法是使用generator通过()动态生成每个元素,而不是一次性在内存中生成:

result = ((i, e) for (i, e) in enumerate(lst) if e > 2)

for i in result:
    print i

然后输出将是:

(2, 3)
(3, 3)
(4, 3)
(5, 3)
(6, 3)
(7, 3)
(8, 3)
(9, 3)
(10, 3)
(11, 3)
(12, 3)
(13, 3)
(14, 3)
(15, 3)

请注意,生成器只能读取一次,这意味着如果再次循环result,则不会打印任何内容。

答案 2 :(得分:0)

lst = [1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1]
print [(i, e) for (i, e) in enumerate(lst) if e > 2]

之前的故事我是用c语言写的。

答案 3 :(得分:0)

对列表进行理解

interesting_bonds = [index, bonds for index, bonds in enumerate(number_of_bonds) if bonds > 2]
for bonds in interesting_bonds:
    print bonds

列表理解是获取您感兴趣的元素的更“pythonic”方式。您也可以使用内置filter

编辑:正如Jon在下面的评论中指出的那样,在过滤后枚举将不会从原始列表中提供正确的索引。所以只需要对枚举列表进行理解。

答案 4 :(得分:0)

您可以添加一个变量,每次循环重新开始时计数+1。

i = 0
for bonds in number_of_bonds:       
     if bonds >= 2:
     print bonds
     print i
     i += 1

答案 5 :(得分:0)

for i in range(len(number_of_bonds)):
    if number_of_bonds[i] >= 2:
        print i, number_of_bonds[i]

为什么不在for循环中使用计数器

答案 6 :(得分:0)

功能风格:

filter(lambda (a,b): b >= 2, enumerate(L))

结果:

[(2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (12, 3), (13, 3), (14, 3), (15, 3)]

这使用enumerate functionfilter function

答案 7 :(得分:0)

所以,如果你想打印原始列表中的位置(之前做任何过滤),这是我认为你想做的事情,那么首先要枚举这些项目的想法然后,对于他们每个人,过滤掉那些不感兴趣的人。否则,如果要在新筛选列表中打印元素的位置,则kunev answer是正确的。 这是我的意思的代码:

for i,bond in enumerate(number_of_bonds):
    if bond >=2:
        print (i,bond)