python-3.x - li = [0] * 10 和 li = [set()] * 10 有什么区别

标签 python-3.x

在 Python 中

li = [0] * 3
li[0] = 1
# li == [1, 0, 0]

这很好用。

li = [set()] * 3
li[0].add(1)
# li == [{1}, {1}, {1}]

这将为列表中的所有内容加 1。 这两者有什么区别?

最佳答案

这里:

li = [0] * 3
li[0] = 1

您创建一个包含三个元素的列表,所有元素都是不可变数字 0。然后将第一个元素替换为不可变数字 1。

而这里:

li = [set()] * 3
li[0].add(1)

您创建一个集合(不是三个集合),并将其放入列表中三次。然后,您引用列表的第一个元素(当然是集合),并向其中添加一个数字。由于只创建了一组,因此这似乎会修改列表中的每个元素(因为它们都是相同的)。

有关 Python 中 [x] * n 危险的更多信息,请参阅:List of lists changes reflected across sublists unexpectedly

关于python-3.x - li = [0] * 10 和 li = [set()] * 10 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964884/

相关文章:

python - 在字典上映射

python - while 循环覆盖结果

python - 创建集合的分区,使得每个分区的长度相同

Python 参数解析 : Leading dash in argument

python - 如何将 O(N*M) 优化为 O(n**2)?

c++ - 在 Pybind11 中使用自动转换

python - 如何在Python中将2 channel 光流灰度JPG图像合并为一张RGB图像?

mysql - “字段”中的 Python pymysql 未知列

python - 具有无限数量参数的 Django urlpattern

python - 猜不同名字的数字游戏