如何在python类列表中高效地生成编号列表
如何使下面的代码更加紧凑和高效 在这里,代码用于查找列表中某个数值所在的位置。 例如,给定的一组数字如何在python类列表中高效地生成编号列表,python,processing-efficiency,coding-efficiency,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(ListN
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]]
您可以使用
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())
递归解决方案将更加优雅,可以处理更多的情况:
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())
没有iter工具
如果没有iter工具,无法运行
ListNo=[1,[2],3]
我不明白你的意思,我可以在我身边运行代码,但没有问题你到底想做什么?在列表中找到某个项目的索引?@Rodneyperusbalandong:它输出[0,1,2]
,但是如果输出[0,1,2]
失败,原因是ListNo=[1,2,3]
我不明白你的意思,我可以在没有问题的情况下在我身边运行代码。你到底想做什么?在列表中找到某项的索引?@Rodneyperusbalandong:它输出[0,1,2]
,但应该输出[0,1,2]
谢谢,这看起来更优雅只是好奇,为什么需要i=count(),而不是i=0?这是为了利用itertools.count()
返回的迭代器,以便下一步(i)时
,则返回序列中的下一个数字。有关详细信息,请参阅itertools.count()
。谢谢,这看起来更优雅。只是好奇,为什么需要i=count(),而不是i=0?这是为了利用itertools.count()
返回的迭代器,以便在调用next(i)
时,返回序列中的下一个数字。有关详细信息,请参阅itertools.count()。你的有点可读性。美好的哈哈,也找到了同样的解决办法。你的有点可读性。美好的