首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python类列表中有效地生成编号列表

如何在python类列表中有效地生成编号列表
EN

Stack Overflow用户
提问于 2018-10-09 08:23:12
回答 3查看 65关注 0票数 1

如何使以下代码更加紧凑和高效。

在这里,代码是查找列表中某些数值所在的位置。例如,给定一组数字

代码语言:javascript
复制
ListNo = [[100,2,5], [50,10], 4, 1, [6,6,500]]

100、50和500分别位于0、3和9的位置。

测试代码如下

代码语言:javascript
复制
ListNo = [[100,2,5], [50,10], 4, 1, [6,6,500]]
NumberedList = ListNo
Const = 0
items = 0

for i, item in enumerate(ListNo):
    MaxRange = len(item) if isinstance(item, list) else 1

    for x in range(0, MaxRange):
        if MaxRange > 1:
            NumberedList[i][x] = Const
        else:
            NumberedList[i] = Const
        Const = Const + 1

print(NumberedList)

[0、1、2、3、4、5、6、7、8、9]

我的问题是,是否还有另一种选择可以使这段代码更加紧凑和高效。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-09 08:44:44

您可以使用itertools.count

代码语言:javascript
复制
from itertools import count
i = count()
print([[next(i) for _ in range(len(l))] if isinstance(l, list) else next(i) for l in ListNo])

这一产出如下:

代码语言:javascript
复制
[[0, 1, 2], [3, 4], 5, 6, [7, 8, 9]]
票数 3
EN

Stack Overflow用户

发布于 2018-10-09 09:21:58

递归解决方案将更加优雅,并处理更多的情况:

代码语言:javascript
复制
def nested_list_ordinal_recurse(l, it):
    if isinstance(l, list):
        return [nested_list_ordinal_recurse(item, it) for item in l]
    else:
        return next(it)

def nested_list_ordinal(l, _it=None):
    return nested_list_ordinal_recurse(l, itertools.count())
票数 2
EN

Stack Overflow用户

发布于 2018-10-09 09:41:47

代码语言:javascript
复制
ListNo = [[100,2,5], [50,10], 4, 1, [6,6,500]];
count=-1
def counter(l=[]):
     global count
     if l:
      return [counter() for i in l]
     else:
         count+=1
         return count
print [counter(item) if isinstance(item, list) else counter()  for item in ListNo ]

没有iter工具

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

https://stackoverflow.com/questions/52716448

复制
相关文章

相似问题

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