列表中的编号元素

Jsg*_*g91 1 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]

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

for bonds in number_of_bonds:       
    if bonds >= 2:
         print bonds
Run Code Online (Sandbox Code Playgroud)

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

(0, 1)
(1, 1)
(2, 3)
Run Code Online (Sandbox Code Playgroud)

等等

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

ava*_*sal 6

为你的问题,你可以做到

[(i, j) for i,j in enumerate(l) if j > 2]
Run Code Online (Sandbox Code Playgroud)

输出:

[(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)]
Run Code Online (Sandbox Code Playgroud)


K Z*_*K Z 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)]
Run Code Online (Sandbox Code Playgroud)

如果你的列表很大,更好的方法是使用生成器 via ()来动态生成每个元素,而不是一次在内存中生成:

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

for i in result:
    print i
Run Code Online (Sandbox Code Playgroud)

然后输出将是:

(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)
Run Code Online (Sandbox Code Playgroud)

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