如何在python类列表中有效地创建编号列表

时间:2018-10-09 08:23:12

标签: python processing-efficiency coding-efficiency

如何使以下代码更紧凑,更有效。

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

ListNo = [[100,2,5], [50,10], 4, 1, [6,6,500]]

值100、50和500分别位于0.3和9的位置。

测试代码如下

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]]

  

我的问题是,是否还有另一种方法可以使此代码更紧凑,更有效。

3 个答案:

答案 0 :(得分:3)

您可以使用itertools.count

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])

这将输出:

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

答案 1 :(得分:2)

递归解决方案会更优雅,并能处理更多情况:

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 :(得分:1)

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 ]

没有迭代工具