当前位置: 首页 > 面试题库 >

Python初始化列表列表[重复]

壤驷文华
2023-03-14
问题内容

我打算初始化一个长度为n的列表列表。

x = [[]] * n

但是,这以某种方式将列表链接在一起。

>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]

我希望有这样的东西:

[[], [0], []]

有任何想法吗?


问题答案:

问题在于它们在内存中都是完全相同的列表。当使用[x]*n语法时,得到的是n许多x对象的列表,但是它们都是对同一对象的引用。它们不是不同的实例,而是n对同一实例的引用。

要列出3个不同的列表,请执行以下操作:

x = [[] for i in range(3)]

这为你提供了3个单独的实例[],这是你想要的

[[]]*n类似于

l = []
x = []
for i in range(n):
    x.append(l)

虽然[[] for i in range(3)]类似于:

x = []
for i in range(n):
    x.append([])   # appending a new list!
In [20]: x = [[]] * 4

In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object


In [22]: x=[[] for i in range(4)]

In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time


 类似资料:
  • 考虑如下代码: vector<double> v = { 1, 2, 3.456, 99.99 }; list<pair<string,string>> languages = { {"Nygaard","Simula"}, {"Richards","BCPL"}, {"Ritchie","C"} }; map<vector<string>,vector<int>> years = {

  • 问题内容: 我想初始化一个多维列表。基本上,我想要一个10x10的网格-10个列表的列表,每个列表包含10个项目。 每个列表值都应初始化为整数0。 单行执行此操作的明显方法:将不起作用,因为它会生成一个包含10个引用的列表,该列表引用一个列表,因此更改任何行中的项都会更改所有行中的项。 我看过的文档讨论了用于复制列表的方法,但是在使用乘法器时仍然无法使用:与效果相同。 除了创建s循环之外,是否有一

  • 问题内容: 这非常丑陋: 有没有办法在一行上声明这些变量? 问题答案: 上述方法的缺点是,您需要计算左侧的名称数,并且在右侧具有完全相同数量的空列表(例如,通过调用或更明确地)。 最主要的是, 不要 使用类似 也不 这将使所有名称都引用 相同的 空列表!

  • 我需要创建一个可用的电视频道列表(用整数标识)。我想首先创建int[]list=5,9,12,19,64。代码如下: 但是我得到了一个语法错误,指出在“=”后面需要一个{。我想要一个电视频道列表,用户一旦打开电视就可以使用。

  • 说明 用于初始化商城商品和分类,注意此协议列表中的商品将会添加到商城,请避免相同商品多次提交。 建议此协议在首次初始化商城时使用,后续新增/修改直接使用商品分类、商品的相关协议 请求地址 http://api.dc78.cn/Api/mall_init_commodity 请求方式 POST 请求参数 POST数据: data=商品明细数据,格式如下: [ { "name": "小家电", "ra

  • 我目前正在替换我所有的标准POJO,以便在所有样板代码中使用Lombok。我发现自己保留了列表的getter,因为如果列表尚未初始化,我希望返回一个空列表。也就是说,我不希望getter返回null。如果有一些我不知道的龙目山魔法可以帮助我避免这样做? 生成的代码示例 我想要的是: