技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

Python - 列表中的最小乘积对

pythonserver side programmingprogramming

在给定的问题陈述中,我们必须在给定的列表和元组列表中找到最小乘积对。因此,我们将使用 Python 来实现代码。

理解问题

当前的问题是从给定的列表中找到最小乘积,并用 Python 创建一个程序。或者我们可以说,我们必须找到与列表中的其他对相比,乘积最小的数字对。有很多方法可以解决这个问题。因此,我们将使用列表和元组列表来展示这个问题陈述。让我们借助一个例子来理解这个问题 -

假设我们有一个列表 [1, 4, 3, 5, 1, 2, 8, 9],在这个列表中,我们可以看到有很多可能的对,但我们必须找到具有最小乘积的对并将其显示为输出。在这个例子中,有一对 (1,1),其中这两个项目的乘积是 1,在所有可能的组合中都较小。

使用元组列表或元组列表

元组列表或元组列表是 Python 编程语言中的一种数据结构。元组列表包含多个元组作为其项目。意味着列表内的每个元素都是一个元组。

为了理解这个程序的逻辑,我们将使用 Python 的"min"函数从给定的数字中获取最小值。然后我们将使用 abs 函数给出数字的绝对值。在 abs 函数中,我们将计算数字 a 和 b 的乘积。并将结果存储在单独的变量中。

算法

  • 步骤 1 - 因为我们必须在给定的元组列表中找到最小乘积对,所以首先我们将创建一个名为 list_min_val 的函数,并在此函数中传递一个名为 numbers 的参数,它是元组类型的列表。

  • 步骤 2 - 定义函数后,我们将使用一个变量来存储该对的最小乘积,并将其命名为 min_result。并通过计算乘积和 min 或借助 min 和 ans 函数的乘积来初始化其值。

  • 步骤 3 - 现在我们将返回 min_result 作为结果。然后我们将列表元组定义为输入并打印结果的值。

示例

#函数用于在给定列表中查找最小产品
def list_min_val(numbers):
   min_result = min([abs(a * b) for a, b in numbers] )
   return min_result
numbers = [(1, 6), (2, 4), (3, 8), (5, 1)]  
print("\n给定元组列表对的最小乘积:")
print(list_min_val(numbers))

输出

给定元组列表对的最小乘积:
5

复杂度

在给定列表中查找最小乘积所需的时间为 O(n),此处 n 是给定元组列表的大小。因为代码只对数字进行一次迭代来计算数字的乘积。

使用列表

在这种方法中,我们将使用 Python 的列表数据结构。并且我们将使用 itertools 创建用于循环目的的迭代器。

算法

  • 步骤 1 - 由于我们使用 python 的 itertools 模块,因此我们首先将其导入为 itts。此模块将帮助我们创建用于循环目的的迭代器。

  • 步骤 2 - 导入 itertools 后,我们将创建一个名为 list_min_pair 的函数,并在函数内部传递名为 numbers 的列表。

  • 步骤 3 - 在上述函数中,我们将使用一个变量来存储最小乘积结果。并使用 min、lambda 函数和 itts.combinations 初始化其值。借助 lambda 函数,我们将计算两个数字的乘积。并且将使用"itts.combinations"函数来查找具有最小乘积值的数字组合。

  • 步骤 4 − 现在我们将定义一个数字列表并打印输出,其中包含显示在控制台上的最小乘积。

示例

# 导入 itertools 以创建迭代器以实现高效循环
import itertools as itts

# 获取最小乘积对的函数
def list_min_pair(numbers):
   min_result = min(itts.combinations(numbers, 2), key = lambda sub: sub[0] * sub[1])
   return min_result

numbers = [2, 4, 3, 1, 5, 6, 7, 8, 9, 10]  
print("\n实际列表:")
print((numbers))
print("\n给定输入列表中的最小乘积对:")
print(list_min_pair(numbers))

输出

实际列表:
[2, 4, 3, 1, 5, 6, 7, 8, 9, 10]

给定输入列表中的最小乘积对:
(2, 1)

复杂性

使用 python 中的列表获取最小乘积对的时间复杂度为 (n^2),这里 n 是给定输入列表的大小。这种复杂性的原因是我们正在对列表的元素进行组合,因此为了进行这些组合,我们需要 n^2 时间。因此,最终的时间复杂度为 O(n^2)。

结论

因此,我们已经了解了在给定列表中查找最小乘积对的不同方法。我们已经了解了 itertools 模块、min 函数、lambda 函数以及 abs 函数的用法。因此,借助这些代码,我们可以学习 Python 中这些内置函数的用法。


相关文章