在 Python 中创建一个重复 N 次相同值的列表

目录

Create a list with same value repeated N times in Python

  1. 在 Python 中创建一个重复 N 次相同值的列表
  2. 使用 itertools.repeat() 创建一个重复 N 次相同值的列表
  3. 使用 list.extend() 将项目追加到列表 N 次

在 Python 中创建一个相同值重复 N 次的列表

使用乘法运算符在 Python 中创建一个具有重复 N 次相同值的列表,例如my_list = ['abc'] * 3.

表达式的结果将是一个包含 N 次指定值的新列表。

主程序
my_list = ['abc'] * 3 print(my_list) # 👉️ ['abc', 'abc', 'abc']

您在列表中指定的项目将在操作返回的新列表中包含 N 次。

确保将要重复的值包装在列表中。

需要注意的一件事是 – 如果您将此方法用于可变容器(如列表或字典),它们都指向内存中的相同位置并具有相同的引用。
主程序
result = [[]] * 3 # 👇️ [[], [], []] print(result) result[0].append('a') # 👇️ [['a'], ['a'], ['a']] print(result)

我们创建了一个包含 3 个嵌套列表的列表。但是,请注意,将一个项目添加到其中一个列表中,会在所有 3 个列表中添加该项目。

这是因为所有嵌套列表都指向内存中的相同位置。

使用列表理解来解决问题

避免此问题的一种方法是使用
列表理解

主程序
result = [[] for i in range(0, 3)] # 👇️ [[], [], []] print(result) result[0].append('a') # 👇️ [['a'], [], []] print(result)
列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

range类通常用于在for 循环中循环特定次数,采用以下参数:

姓名 描述
start 表示范围开始的整数(默认为0
stop 向上,但不包括提供的整数
step 范围将由每 N 个数字组成,从startstop(默认为1

如果您只将单个参数传递给range()构造函数,则它被认为是参数的值stop

您还可以在列表中指定项目,就像我们在第一个示例中所做的那样,我们仍然最终创建了一个包含 3 个不同嵌套列表的列表。

主程序
result = [['a'] for i in range(0, 3)] # 👇️ [['a'], ['a'], ['a']] print(result) result[0].append('b') # 👇️ [['a', 'b'], ['a'], ['a']] print(result)

您还可以使用该itertools.repeat()方法创建包含 N 次相同项目的列表。

创建一个相同值重复 N 次的列表

如果您需要通过将多个值重复 N 次来创建列表,请使用循环for

主程序
a_list = [1, 2, 3] new_list = [] count = 3 for index in range(count): for item in a_list: new_list.append(item) # 👇️ [1, 2, 3, 1, 2, 3, 1, 2, 3] print(new_list)

我们使用for循环对一个range对象进行了 3 次迭代。

在每次迭代中,我们使用嵌套循环for遍历列表,并使用 将其值添加到新列表中append()

# 使用 itertools.repeat() 创建一个重复 N 次相同值的列表

这是一个三步过程:

  1. 导入itertools模块。
  2. 调用该repeat()方法,例如itertools.repeat('a', 3)
  3. 使用该类list()将对象转换为列表。
主程序
import itertools my_list = list(itertools.repeat('a', 3)) print(my_list) # 👉️ ['a', 'a', 'a']

itertools.repeat

方法用于创建一个返回 N 次提供的对象的迭代器

该方法采用以下 2 个参数:

姓名 描述
object 要从迭代器返回的对象
times 对象应该从迭代器返回多少次(可选)

如果您不为times参数提供值,迭代器将无限期地运行。

请注意,在尝试创建可变对象列表时,这种方法也会遇到同样的问题。

主程序
import itertools my_list = list(itertools.repeat(['a'], 3)) print(my_list) # 👉️ [['a'], ['a'], ['a']] my_list[0].append('b') print(my_list) # 👉️ [['a', 'b'], ['a', 'b'], ['a', 'b']]

您可以使用列表理解来避免这种情况。

主程序
my_list = [['a'] for i in range(0, 3)] print(my_list) # 👉️ [['a'], ['a'], ['a']] my_list[0].append('b') print(my_list) # 👉️ [['a', 'b'], ['a'], ['a']]

我们创建的所有嵌套列表都指向内存中的不同位置,因此更新一个不会改变其他列表。

# 使用 list.extend() 将项目添加到列表 N 次

如果您需要将一个项目附加到列表 N 次:

  1. 使用生成器表达式迭代range对象。
  2. 使用该list.extend()方法将原始列表的值重复 N 次。
主程序
my_list = ['a', 'b'] my_list.extend('c' for _ in range(3)) print(my_list) # 👉️ ['a', 'b', 'c', 'c', 'c']

我们使用
生成器表达式
来迭代
range对象。

生成器表达式与列表理解非常相似。

它们用于对每个元素执行某些操作或选择满足条件的元素子集。

list.extend方法采用可迭代对象并通过附加可迭代对象中
所有项目来扩展列表。

主程序
my_list = ['bobby'] my_list.extend(['hadz', '.', 'com']) print(my_list) # 👉️ ['bobby', 'hadz', '.', 'com']

list.extend方法在改变原始列表时返回 None 。

当您需要将项目 N 次附加到现有列表时,此方法很有用。

如果您需要创建一个包含重复 N 次的相同值的列表,乘法运算符应该是您的首选方法。

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: