gpt4 book ai didi

python - 一般来说,遍历未知数量列表的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 08:58:47 24 4
gpt4 key购买 nike

给定一种支持通过列表进行迭代的编程语言,即

for element in list do
...

如果我们有一个将动态数量的列表作为输入的程序,list[1] ... list[n](其中 n 可以取任何值),遍历这些列表中每个元素组合的最佳方法是什么?

例如list[1] = [1,2], list[2] = [1,3] 然后我们遍历 [[1,1], [ 1,3], [2,1], [2,3]].

我认为不太好的想法:

1) 在 list_product 中创建这些列表的大产品(例如,在 Python 中,您可以多次使用 itertools.product()),然后遍历 list_product.问题是这需要我们存储一个(可能很大的)可迭代对象。

2) 找到所有列表的长度的乘积,total_length 并使用模块化算术类型的思想按照以下行进行操作。

len_lists = [len(list[i]) for i in [1..n]]
total_length = Product(len_lists)
for i in [1 ... total_length] do
total = i-1
list_index = [1...n]
for j in [n ... 1] do
list_index[j] = IntegerPartOf(total / Product([1:j-1]))
total = RemainderOf(total / Product([1:j-1]))
od
print list_index
od

然后为所有不同的组合打印 list_index

在速度方面有没有更好的方法(不太关心可读性)?

最佳答案

1) Create a big product of these lists into list_product (e.g. in Python you could use itertools.product() multiple times) and then iterate over list_product. Problem is that this requires us to store a (potentially huge) iterable.

itertools(以及一般的迭代器)的要点是它们不会一次构建整个结果,而是一次从结果中创建和返回项。因此,如果您有一个列表列表 ListOfLists 并且您希望所有元组都包含其中每个列表中的一个元素,请使用

for elt in itertools.product(*ListOfLists):
...

请注意,您只需调用一次product它既简单又高效。

关于python - 一般来说,遍历未知数量列表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21166536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com