目录
Create a list with same value repeated N times in Python
在 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 个数字组成,从start 到stop (默认为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 次相同值的列表
这是一个三步过程:
- 导入
itertools
模块。 - 调用该
repeat()
方法,例如itertools.repeat('a', 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 次:
- 使用生成器表达式迭代
range
对象。 - 使用该
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 次的相同值的列表,乘法运算符应该是您的首选方法。
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: