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 库函数的使用。

更新于: 2023年10月17日

93 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告