如何有效地在 python Class-list 中制作编号列表
How to efficiently make a numbered list in python Class-list
如何让下面的代码更简洁高效
这里的代码是查找某个数值在列表中的位置。
例如,给定一组数字
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]]
我的问题是,是否有另一种选择可以使这段代码更紧凑和高效。
您可以使用 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]]
递归解决方案会更优雅,并处理更多情况:
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())
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 工具
如何让下面的代码更简洁高效
这里的代码是查找某个数值在列表中的位置。 例如,给定一组数字
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]]
我的问题是,是否有另一种选择可以使这段代码更紧凑和高效。
您可以使用 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]]
递归解决方案会更优雅,并处理更多情况:
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())
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 工具