在 Python 中将一个列表列表转换为两个列表
Convert a list of lists to two lists in Python
将列表的列表转换为两个列表:
- 使用
zip()
带有*
运算符的函数来解压缩列表。 - 使用该
map()
函数将zip
对象中的元组转换为列表。 - 使用
list()
该类将map
对象转换为列表。
主程序
list_of_lists = [[1, 2], [3, 4], [5, 6]] result = list(map(list, zip(*list_of_lists))) # 👇️ [[1, 3, 5], [2, 4, 6]] print(result) first, second = result print(first) # 👉️ [1, 3, 5] print(second) # 👉️ [2, 4, 6]
第一步是使用zip()
带有*
(iterable unpacking) 运算符的函数来解压缩列表。
主程序
list_of_lists = [[1, 2], [3, 4], [5, 6]] result = list(zip(*list_of_lists)) # 👇️ [(1, 3, 5), (2, 4, 6)] print(result)
zip函数并行迭代多个可迭代对象,并生成元组,其中每个可迭代对象都有一个项目。
该zip
函数返回元组的迭代器。
我们使用该map()
函数将迭代器中的元组转换为列表。
主程序
list_of_lists = [[1, 2], [3, 4], [5, 6]] result = list(map(list, zip(*list_of_lists))) # 👇️ [[1, 3, 5], [2, 4, 6]] print(result) first, second = result print(first) # 👉️ [1, 3, 5] print(second) # 👉️ [2, 4, 6]
map()函数将一个函数和一个可迭代对象作为参数,并使用可迭代对象的每个项目调用该函数。
我们只是将迭代器对象中的每个元组传递给list()
类。
最后一步是将map
对象传递给list()
类。
您可以选择将列表值解压缩到变量中。
要考虑的替代方法是使用多个列表理解。
主程序
list_of_lists = [[1, 2], [3, 4], [5, 6]] a = [l[0] for l in list_of_lists] print(a) # 👉️ [1, 3, 5] b = [l[1] for l in list_of_lists] print(b) # 👉️ [2, 4, 6]
list
在每次迭代中,我们访问特定索引处的当前嵌套对象并获得包含结果的列表。
或者,您可以使用列表理解来进行转换。
将列表的列表转换为两个列表:
- 使用
zip()
带有*
运算符的函数来解压缩列表。 - 使用列表理解来迭代
zip
对象。 - 使用
list()
该类将每个元组转换为列表。
主程序
list_of_lists = [[1, 2], [3, 4], [5, 6]] result = [list(tup) for tup in zip(*list_of_lists)] print(result) # 👉️ [[1, 3, 5], [2, 4, 6]] first, second = result print(first) # 👉️ [1, 3, 5] print(second) # 👉️ [2, 4, 6]
我们使用列表理解而不是使用map()
函数。
列表推导用于对每个元素执行一些操作,或者选择满足条件的元素子集。
在每次迭代中,我们将当前元组传递给list()
类以将其转换为列表。
您选择哪种方法是个人喜好的问题。我会选择列表理解,因为我发现它更直接、更容易阅读。