首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建和使用列表列表:在Python中

创建和使用列表列表:在Python中
EN

Stack Overflow用户
提问于 2014-12-14 23:55:45
回答 2查看 1.5K关注 0票数 1

我是Python的新手,为了满足某些需要,我正在努力弄清楚如何处理列表列表。

我在做什么:

代码语言:javascript
复制
segment_coef = [[list()]*4]*17 
print segment_coef
segment_coef[0][0].append(1)
segment_coef[1][0].append(2)
segment_coef[2][0].append(3)
print segment_coef

在第一次print之后,我有:

代码语言:javascript
复制
[ [ [],[],[],[] ] , ... 14 more time ... , [ [],[],[],[] ] ]

在这三个append命令之后,我想要有以下内容:

代码语言:javascript
复制
[ [ [1],[],[],[] ] , [ [2],[],[],[] ], [ [3],[],[],[] ] ]

但我有:

代码语言:javascript
复制
[ [ [1,2,3],[1,2,3],[1,2,3],[1,2,3] ] , [ [1,2,3],[1,2,3],[1,2,3],[1,2,3] ], ... up to the end ]

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-15 00:01:58

有几种方法可以创建一个由17个列表组成的列表,每个列表包含4个子列表。

最短的是

代码语言:javascript
复制
[[list() for i in range(4)] for j in range(17)] 

如果您这样做,您的附加程序将按您希望的那样工作。

如果您熟悉C或Java等没有列表理解的语言,那么这种方式对您来说可能更熟悉:

代码语言:javascript
复制
l = []
for j in range (17):
  k = []
  for i in range (4):
    k.append(list())
  l.append (k)

这也是可以接受的,但是对于许多蟒蛇头来说,理解列表更好。列表中的内容应该是表现方面的,至少和理解能力一样好。

票数 3
EN

Stack Overflow用户

发布于 2014-12-14 23:58:11

Python使用相同的列表4次,然后它使用相同的列表4列表17次!

这里的问题是python列表都是可变的,并且您正在多次使用(引用)相同的列表。因此,当您修改列表时,所有对该列表的引用都显示了不同之处。

取决于如何/从何处获取数据,取决于修复数据的最佳方法,但类似的情况如下:

代码语言:javascript
复制
lols = []
for i in range(17):
    lols.append([1,2,3,4])
# lols is not a list of 17 lists, each list contains the same data but they are different lists
lols[0][0] = 99
# Now only the first element from the first list is updated.

要明确的是,问题来自于执行[list() * 4],它构造列表(使用list),然后重复4次。如果你做了[list(), list()m list(), list()],你会得到4个不同的(但都是空的)列表,或者,更简单地说,是[list() for _ in range(4)]或者只是[[] for _ in range(4)]

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27475539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档