首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在python列表理解中维护计数

在python列表理解中维护计数
EN

Stack Overflow用户
提问于 2012-02-09 00:54:19
回答 8查看 38.2K关注 0票数 24

在Python语言中,在列表理解过程中有没有像for循环那样可用的counter

通过这个例子,我需要一个计数器的原因就更清楚了:

我希望做到以下几点:

初始列表:['p', 'q', 'r', 's']

所需列表:[(1, 'P'), (2, 'Q'), (3, 'R'), (4, 'S')]

在所需列表中,每个元组的第一个元素都是序数。如果它只是平面列表,我可以使用zip来实现这一点。但是,我正在处理的列表是嵌套的,三层深(考虑分层数据),并且它是通过列表理解生成的。

所以,我想知道有什么方法可以在列表理解过程中引入这些序数。如果不是,最好的解决方案是什么?

附注:这里的小写字母被转换成大写字母,但这不是问题的一部分,可以把它看作是数据转换。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
allObj = Category.objects.all()

tree =[(_, l1.name, [(__, l2.name, [(___, l3.name) for l3 in allObj if l3.parentid == l2.categoryid]) for l2 in allObj if l2.parentid == l1.categoryid]) for l1 in allObj if l1.parentid == None]

allObj包含来自表类别的数据,而表类别又包含以邻接表形式表示的分层数据。

我把_放在我需要序数的地方。请注意,该列表是嵌套的,因此在由1、2和3个_表示的每个级别上都会有一个单独的计数器。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-02-09 00:56:39

最基本的情况

代码语言:javascript
代码运行次数:0
运行
复制
[(i, x) for i, x in enumerate(some_list, 1)]

使用if语句应用筛选器

代码语言:javascript
代码运行次数:0
运行
复制
[(i, x) for i, x in enumerate(some_list, 1) if i > 2]

或者像这样

代码语言:javascript
代码运行次数:0
运行
复制
[(i, x) for i, x in enumerate(some_list, 1) if x != 'p']

一句忠告

大多数情况下,您不需要这样做。相反,您只需在需要枚举的地方调用enumerate(some_list, 1),例如在for循环中。

票数 61
EN

Stack Overflow用户

发布于 2017-09-07 23:45:30

当我偶然发现这个答案的时候,我正在寻找一些稍微不同的东西。

我的情况是根据列表理解中的条件进行计数。为了防止它对其他人有用,我是这样解决它的:

import itertools counter = itertools.count(0) [(next(counter), x) for x in some_list if x != 'p']

这样,计数器将只在满足条件时递增,而不是在每次迭代时递增。

票数 16
EN

Stack Overflow用户

发布于 2012-02-09 01:09:13

正如在其他答案中所显示的,标准库为您提供enumerate,这意味着您可能甚至不需要如下列表:

代码语言:javascript
代码运行次数:0
运行
复制
[(1, 'P'), (2, 'Q'), (3, 'R'), (4, 'S')]

因为每次需要将字母与其位置相关的数字绑定时,只需调用enumerate即可。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
>>> low = ['p', 'q', 'r', 's']
>>> upp = [c.upper() for c in low]
>>>
>>> for i,c in enumerate(upp, 1):
...     print(i,c)
...
1 P
2 Q
3 R
4 S

这只是一个例子,也许你真的需要这样的列表。

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

https://stackoverflow.com/questions/9197844

复制
相关文章

相似问题

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