首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给列表中的元素编号

给列表中的元素编号
EN

Stack Overflow用户
提问于 2013-03-05 19:15:08
回答 8查看 248关注 0票数 1

我有一个清单是这样写的:

1、1、3、3、3、3、3、3、3、3、3、3、3、3、3、3、1、1、1、1、1、1、1

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

代码语言:javascript
运行
复制
for bonds in number_of_bonds:       
    if bonds >= 2:
         print bonds

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

代码语言:javascript
运行
复制
(0, 1)
(1, 1)
(2, 3)

那么,正确的方法是什么呢?

EN

回答 8

Stack Overflow用户

发布于 2013-03-05 19:16:22

对于你的问题,你可以做

代码语言:javascript
运行
复制
[(i, j) for i,j in enumerate(l) if j > 2]

输出:

代码语言:javascript
运行
复制
[(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)]
票数 6
EN

Stack Overflow用户

发布于 2013-03-05 19:17:44

代码语言:javascript
运行
复制
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动态生成每个元素,而不是在内存中一次性生成所有元素:

代码语言:javascript
运行
复制
result = ((i, e) for (i, e) in enumerate(lst) if e > 2)

for i in result:
    print i

然后输出将是:

代码语言:javascript
运行
复制
(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,则不会打印任何内容。

票数 5
EN

Stack Overflow用户

发布于 2013-03-05 19:17:58

代码语言:javascript
运行
复制
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语言写的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15222365

复制
相关文章

相似问题

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