Python - 列表中的最小乘积对


在给定的问题陈述中,我们必须在给定的列表和元组列表中找到最小乘积对。因此,我们将使用 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 和 ans 函数计算乘积和该乘积的最小值来初始化其值。

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

示例

#Function to find the minimum,  product in the given list  
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("\nMinimum product from the pairs of the given tuple list:")
print(list_min_val(numbers))

输出

Minimum product from the pairs of the given tuple list:
5

复杂度

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

使用列表

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

算法

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

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

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

  • 步骤 4 - 现在,我们将定义一个 numbers 列表并在控制台上打印具有最小乘积的输出。

示例

# Import itertools to create iterators for efficient looping
import itertools as itts

# Function to get the minimum product pair
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("\nThe actual list:")
print((numbers))
print("\nPair of minimum product from the given input list:")
print(list_min_pair(numbers))

输出

The actual list:
[2, 4, 3, 1, 5, 6, 7, 8, 9, 10]

Pair of minimum product from the given input list:
(2, 1)

复杂度

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

结论

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

更新于: 2023年10月16日

80 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告