Python - 嵌套列表到单值元组
在给定的问题陈述中,我们必须借助 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 库函数的用法。