python-3.x 对列表中每个可能的项对的操作

lawou6xi  于 2023-02-10  发布在  Python
关注(0)|答案(3)|浏览(144)

我想把每一对的乘积值收集到一个数字列表中。
这适用于较小的数字,但不适用于较大的数字。如何优化我的解决方案?

#will work fine with min = 10 & max = 99
#but not with these values under
min = 1000
max = 9999
seq = range(min, max + 1)
products = set()
for i in seq:
    for j in seq:
        p = i * j
        products.add(p)
pgky5nke

pgky5nke1#

你可以用numpy取外积,然后取唯一值。

min_num = 1000
max_num = 9999

numbers = np.arange(min_num, max_num+1)

products = np.unique(np.outer(numbers, numbers))
mum43rcc

mum43rcc2#

您可以使用解析直接构建一个集合。要进行优化,只需通过将数字与后续数字及其自身相乘来计算每个乘积一次,而不是每对反转数字(这只会浪费时间生成重复值):

lo = 1000
hi = 9999

prods = {i*j for i in range(lo,hi+1) for j in range(i,hi+1)}

print(len(prods)) # 20789643
8tntrjer

8tntrjer3#

嵌套列表理解应该更快:

products = [i*j for i in seq for j in seq]

相关问题