在 Python 中加入列表的列表
Join a list of lists in Python
要加入 Python 中的列表列表:
- 声明一个新变量并将其设置为一个空列表。
- 使用
for
循环遍历二维列表。 - 使用嵌套
for
循环遍历每个嵌套列表。 - 将每个项目附加到空列表。
主程序
my_2d_list = [['a', 'b'], ['c', 'd'], ['e', 'f']] flat_list = [] for l in my_2d_list: for item in l: flat_list.append(item) # 👇️ ['a', 'b', 'c', 'd', 'e', 'f'] print(flat_list)
我们使用嵌套for
循环来连接列表列表。
外for
循环用于迭代二维列表。
为了访问嵌套列表中的项目,我们需要一个嵌套循环。
for
在每次迭代中,我们将每个列表项附加到一个空列表中。
如果您有一个 3D 列表,您可以将此方法与一个更多的嵌套循环一起使用。
您可以使用列表理解来获得相同的结果。
主程序
my_2d_list = [['a', 'b'], ['c', 'd'], ['e', 'f']] flat_list = [item for l in my_2d_list for item in l] # 👇️ ['a', 'b', 'c', 'd', 'e', 'f'] print(flat_list)
列表推导用于对每个元素执行一些操作,或者选择满足条件的元素子集。
示例中的列表理解与我们使用的循环非常相似
for
,但语法更难阅读。我们仍然有 2 个for
循环,但不是将嵌套列表的项目附加到空列表,而是简单地从列表推导中返回它们。
或者,您可以使用该itertools.chain.from_iterable
方法。
使用该itertools.chain.from_iterable()
方法加入列表列表,例如
list(itertools.chain.from_iterable(my_2d_list))
。该方法在幕后使用嵌套的 for 循环,并将列表列表连接到一个平面列表中。
主程序
import itertools my_2d_list = [['a', 'b'], ['c', 'd'], ['e', 'f']] flat_list = list(itertools.chain.from_iterable(my_2d_list)) # 👇️ ['a', 'b', 'c', 'd', 'e', 'f'] print(flat_list)
itertools.chain.from_iterable
方法可用于实现相同的结果。
该方法大致等同于以下函数。
主程序
def from_iterable(iterables): for it in iterables: for element in it: yield element
要考虑的另一种选择是使用内置sum()
函数。
要加入列表列表:
- 将二维列表和一个空列表传递给
sum()
函数。 - 该
sum
函数将对列表的元素求和,并使用空列表作为start
值。 - 结果是一个包含项目的平面列表。
主程序
my_2d_list = [['a', 'b'], ['c', 'd'], ['e', 'f']] flat_list = sum(my_2d_list, []) # 👇️ ['a', 'b', 'c', 'd', 'e', 'f'] print(flat_list)
sum函数接受一个可迭代对象和一个start
参数,从左到右对它们求和并返回总数。
当我们对两个列表求和时,我们得到一个包含两个列表中的项目的列表。
主程序
# 👇️ ['a', 'b', 'c', 'd'] print(['a', 'b'] + ['c', 'd']) # 👇️ [1, 2, 3, 4] print([1, 2] + [3, 4])
默认情况下,该start
参数设置为0
,因此我们必须显式传递一个空列表。
请注意,这种方法比使用嵌套for
循环或itertools.chain.from_iterable
方法效率低一些。