Python - 嵌套列表转换为单值元组
在给定的问题陈述中,我们必须借助 Python 功能将给定的嵌套列表转换为单值元组。因此,我们将使用不同的技术在 python 中解决此任务。
理解问题
眼前的问题是使用嵌套列表创建一个单值元组并在 Python 中实现代码。有时我们需要在竞赛编程或公司面试中解决此类问题。嵌套列表允许我们在单个列表中存储多个子列表。单值元组意味着在一个元组中应该只有一个值。所以基本上我们必须创建一个算法将嵌套列表转换为单个元组值。
上述问题的逻辑
给定的问题可以使用不同的方法解决。但在我们的文章中,我们将通过三种方式解决此问题。第一种方法将使用 reduce 函数。第二种方法将使用循环。在第三种方法中,我们将使用 Python 的 numpy 库。
算法 - 使用 Reduce 函数
步骤 1 - 首先,我们将从 Python 的 functools 库导入 reduce 函数。
步骤 2 - 之后,我们将定义函数为 convert_the_list 并传递一个参数作为 the_list,它是嵌套列表。
步骤 3 - 现在,我们将使用 functools 中的 reduce 函数来展平给定的嵌套列表。
步骤 4 - 然后,我们将创建一个新列表,为给定列表中的每个值创建一个元组。
步骤 5 - 最后,我们将返回列表中单个元组值的输出。
示例 - 使用 Reduce 函数
# Import the reduce function from functools import reduce #Function to convert nested list in single tuple value 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 #define the nested list nested_list = [[12, 20], [15, 17, 16], [36], [45, 87]] # Show the input nested list print("Input Nested list : " + str(nested_list)) Output = convert_the_list(nested_list) # Print the result print("Single tuple value list: " + str(Output))
输出
Input Nested list : [[12, 20], [15, 17, 16], [36], [45, 87]] Single tuple value list: [(12,), (20,), (15,), (17,), (16,), (36,), (45,), (87,)]
复杂度
使用 reduce 函数将嵌套列表转换为单值元组的代码为 O(n²) ,其中 n 是给定嵌套列表中项目的总数。因为我们使用了具有 O(n²) 时间复杂度的 reduce 函数,这是造成这种时间复杂度的原因。
算法 - 使用 for 循环
步骤 1 - 定义名为 convert_the_list 的函数,并传递一个参数 the_list,该参数表示输入嵌套列表。
步骤 2 - 初始化一个名为 the_tuple 的空对象来存储单值元组。
步骤 3 - 现在使用 for 循环遍历嵌套列表的项目,并使用嵌套循环遍历嵌套列表项目。
步骤 4 - 在迭代过程中,我们将每个项目追加到 the_tuple 对象中。
步骤 5 - 并返回 the_tuple 的值以获取单值元组列表。
示例 - 使用 for 循环
#function to convert nested list in single value tuple 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 #Initialize the nested lists nested_list = [[1, 5, 6], [4, 8, 9]] Output = convert_the_list(nested_list) print("The Single value tuple:", Output) nested_list1 = [[12, 14, 16, 18]] Output1 = convert_the_list(nested_list1) print("The Single value tuple:", Output1)
输出
The Single value tuple: [(1,), (5,), (6,), (4,), (8,), (9,)] The Single value tuple: [(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 以在 Output 中显示。
示例 - 使用 Numpy
# Import the numpy library import numpy as nmp def convert_the_list(the_list): # convert the list into an array the_array = nmp.array(the_list) # Flatten the above array flat_array = the_array.flatten() # convert the flattened array into the tuple format Output_tuple = tuple(flat_array) return Output_tuple # Initialize the input nested list the_nested_list = [[14, 17, 13], [11, 18, 15], [12, 19, 16]] the_result = convert_the_list(the_nested_list) print("The converted single tuple: ", the_result)
输出
The converted single tuple: (14, 17, 13, 11, 18, 15, 12, 19, 16)
复杂度
使用 numpy 库将嵌套列表转换为单个元组值的时间复杂度为 O(n) ,因为我们首先将列表转换为大小为 n 的数组,然后再次将数组转换为元组。
结论
因此,我们已经成功地解决了将嵌套列表更改为使用 Python 的单值元组的给定问题。正如我们已经使用了三种方法来解决给定的问题。所有代码都具有不同的时间复杂度。并且我们学习了 reduce 函数、for 循环和 numpy 库函数的使用。