Python - 嵌套列表到单值元组

pythonserver side programmingprogramming

在给定的问题陈述中,我们必须借助 Python 函数将给定的嵌套列表转换为单值元组。因此,我们将使用不同的技术在 Python 中解决此任务。

理解问题

当前的问题是使用嵌套列表创建单值元组并在 Python 中实现代码。有时我们需要在竞争性编程或公司面试中解决这类问题。嵌套列表允许我们将多个子列表存储在单个列表中。单值元组意味着元组中应该只有一个值。所以基本上我们必须创建一个算法来将嵌套列表转换为单个元组值。

上述问题的逻辑

可以使用不同的方法解决给定的问题。但在我们的文章中,我们将以三种方式解决这个问题。第一种方法是使用 Reduce 函数。第二种方法是使用循环。在第三种方法中,我们将使用 Python 的 numpy 库。

算法 - 使用 Reduce 函数

  • 步骤 1 − 首先,我们将从 Python 的 functools 库中导入 Reduce 函数。

  • 步骤 2 - 之后,我们将函数定义为 convert_the_list,并传递一个参数作为 the_list,即嵌套列表。

  • 步骤 3 - 现在,我们将使用 functools 中的 reduce 函数来展平给定的嵌套列表。

  • 步骤 4 - 然后,我们将创建一个新列表,用于为给定列表中的每个值创建一个元组。

  • 步骤 5 - 最后,我们将返回列表中单个元组值的输出。

示例 - 使用 Reduce 函数

# 导入 Reduce 函数
from functools import Reduce
# 用于将嵌套列表转换为单个的函数元组值
def convert_the_list(the_list):
   single_list = reduce(lambda a, b: a+b, the_list)
   result = [(a,) for a in single_list]
   return result

#定义嵌套列表
nested_list = [[12, 20], [15, 17, 16], [36], [45, 87]]

# 显示输入的嵌套列表
print("输入嵌套列表:" + str(nested_list))

Output = convert_the_list(nested_list)

# 打印结果
print("单个元组值列表:" + str(Output))

输出

输入嵌套列表:[[12, 20], [15, 17, 16], [36], [45, 87]]
单个元组值列表:[(12,), (20,), (15,), (17,), (16,), (36,), (45,), (87,)]

复杂性

使用 Reduce 函数将嵌套列表转换为单值元组的代码为 O(n²),这里 n 是给定嵌套列表中的项目总数。因为我们使用的 Reduce 函数具有 O(n²) 的时间复杂度,这就是造成这种时间复杂度的原因。

算法 - 使用 for 循环

  • 步骤 1 - 定义名为 convert_the_list 的函数并传递一个参数 the_list,该参数表示输入嵌套列表。

  • 步骤 2 - 初始化一个名为 the_tuple 的空白对象来存储单值元组。

  • 步骤 3 - 现在使用 for 循环遍历嵌套列表的项目,并使用嵌套循环遍历嵌套列表项目。

  • 步骤 4 - 在迭代过程中,我们将在 the_tuple 对象中附加每个项目。

  • 步骤 5 - 并返回 the_tuple 的值以获取单值元组列表。

示例 - 使用 for 循环

#函数将嵌套列表转换为单值元组
def convert_the_list(the_list):
   the_tuple = []
   for sub_list in the_list:
      for val in sub_list:
         the_tuple.append((val,))
   return the_tuple
#初始化嵌套列表
nested_list = [[1, 5, 6], [4, 8, 9]]
Output = convert_the_list(nested_list)
print("单值元组:", Output)

nested_list1 = [[12, 14, 16, 18]]
Output1 = convert_the_list(nested_list1)
print("单值元组:", Output1)

输出

单值元组:[(1,), (5,), (6,), (4,), (8,), (9,)]
单值元组:[(12,), (14,), (16,), (18,)]

复杂度

将嵌套列表转换为单值的时间复杂度使用 for 循环的元组列表的复杂度为 O(m * n),这里 m 是输入列表中子列表的计数,n 是列表中项目的总计数。

算法 - 使用 Numpy

  • 步骤 1 − 首先,使用 import 关键字将 numpy 库导入为 nmp。

  • 步骤 2 - 将函数定义为 convert_the_list,并将参数作为 the_list(即嵌套的输入列表)传递。

  • 步骤 3 - 现在,我们首先使用函数内的 numpy 将给定的列表转换为数组。

  • 步骤 4 - 然后,我们将使用 flatten 方法展平给定的数组并删除子数组。

  • 步骤 5 - 由于我们现在有了展平的数组,我们将使用 tuple 函数将其转换为元组。并返回 Output_tuple 以显示在输出中。

示例 - 使用 Numpy

# 导入 numpy 库
import numpy as nmp

def convert_the_list(the_list):
    # 将列表转换为数组
    the_array = nmp.array(the_list)
    # 将上述数组展平
    flat_array = the_array.flatten()
    # 将展平后的数组转换为元组格式
    Output_tuple = tuple(flat_array)
    return Output_tuple

# 初始化输入嵌套列表
the_nested_list = [[14, 17, 13], [11, 18, 15], [12, 19, 16]]
the_result = convert_the_list(the_nested_list)
print("转换后的单个元组: ", the_result)

输出

转换后的单个元组: (14, 17, 13, 11, 18, 15, 12, 19, 16)

复杂度

使用 numpy 库将嵌套列表转换为单个元组值的时间复杂度为 O(n),因为我们首先将列表转换为大小为 n 的数组,然后再次将数组转换为元组。

结论

因此,我们已成功解决了使用 Python 将嵌套列表更改为单值元组的问题。因为我们使用了三种方法来解决给定的问题。所有代码的时间复杂度都不同。并且我们已经学习了 Reduce 函数、for 循环和 numpy 库函数的用法。


相关文章