在Python中,在列表理解期间是否有任何counter
可用,就像在for
循环中一样?
更清楚的是,我为什么需要一个计数器,举个例子:
我希望实现以下目标:
初始列表:['p', 'q', 'r', 's']
所需列表:[(1, 'P'), (2, 'Q'), (3, 'R'), (4, 'S')]
在所需的列表中,每个元组的第一个元素都是序号。如果只是简单的列表,我可以使用zip
来实现这一点。但是,我正在处理的列表是嵌套的、三层的(考虑层次数据),它是通过列表理解生成的。
所以,我想知道有没有办法在列表理解过程中引入这些序数。如果没有,最好的解决办法是什么。
备注:这里小写字母被转换成大写字母,但这不是问题的一部分,可以把它看作是一个数据转换。
代码:
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_
s表示
当我偶然发现这个答案时,我正在寻找一些稍微不同的东西。
我的情况是根据列表理解中的条件进行计数。 万一对别人有用,我就这么解决了:
import itertools counter = itertools.count(0) [(next(counter), x) for x in some_list if x != 'p']
这样,计数器将只在满足条件时递增,而不是在每次迭代时递增。
最基本的情况
使用if语句应用筛选器
或者像这样
一句忠告
通常你不需要这样做。相反,您只需在需要枚举的地方调用
enumerate(some_list, 1)
,例如在for
循环中。如其他答案所示,标准库提供给您^{} ,这意味着您可能甚至不需要如下列表:
因为每次你需要用一个与其位置相关的数字绑定这个字母时,你只需调用
enumerate
。示例:
这只是一个例子,也许你真的需要这样的清单。
相关问题 更多 >
编程相关推荐