如何在不使用迭代器和蛮力的情况下在 python 列表中找到元素的所有两位数组合



If List 由 1,2 和 3 作为元素组成 所有可能的 2 位数字组合都是 11 12 13 22 23 21 33 31 32

这取决于您对蛮力的定义...

L = [1,2,3]
L3 = [
(l * 10) + l2
for l in L
for l2 in L
]

如果将L定义为range(0, 10)那么最大组合总数将仅为100,这在现代计算机上没什么大不了的。但是,如果您正在考虑将其扩展到更多数字,那么您可以考虑改用生成器。

列表理解将在内存中创建一个完整的列表。而当您只想迭代结果并且实际上不需要同时使用内存中的所有元素时,将使用生成器。

L = range(0, 10)
combinations = (
(l * 100) + (l2 * 10) + l3
for l in L
for l2 in L
for l3 in L
)

请注意,这里唯一的区别是括号。

在 ipython 中运行它会给你这样的结果:

In [29]: combinations                                      
Out[29]: <generator object <genexpr> at 0x7f68103baad0>

生成器对象可以迭代,但在使用项目之前不会计算这些项目。发电机只能消耗一次。

最新更新