更新2d列表

时间:2015-08-24 06:48:07

标签: python python-2.7

lis是一个列表。想把它当作2d列表操作并用一些更新  值。

lis = [0 for i in range(3)]
print "1st time list",lis

for i in range(3):
    lis[i]=[0]*2  # replaced and tried with  lis[i]=[0,0]

print "2nd time list ",lis

for i in  range(3):
    for j in lis[i]:
        print "i:",i
        print "j:",j
        lis[i][j] = i+j
        print "value entered: ", lis[i][j]   # here showing correct o/p             

print lis                   #should be [[0,0],[1,1],[2,2]] , but not coming
                            #as expected.

有人可以解释并纠正我吗?

3 个答案:

答案 0 :(得分:0)

我假设您要做的是让每个内部列表都包含索引号作为元素[[0,0],[1,1],[2,2],[3,3] ...]

保持代码的当前结构,这应该有效:

lis = [0 for i in range(3)]
print "1st time list",lis

for i in range(3):
    lis[i]=[0]*2  # replaced and tried with  lis[i]=[0,0]

print "2nd time list ",lis

for i in range(len(lis)):
    lis[i] = [i, i]

print lis

你的工作不起作用的原因是因为你正在做内循环。 for j in lis[i]没有按照您的期望行事。该行的作用是它需要lis [i]本身就是一个列表,并循环遍历该列表中的每个元素。在该循环时,最后一个元素为0,因此您总是在最终内部列表位置获得0。

这可能是一种更简单的方法来实现你想要的东西(虽然我不知道你的例子是否是一个大型项目的一部分,需要你按照你现在的方式去做):

numElements = 3

lis = []

for i in range(numElements):
    lis.append([i,i])

print lis

答案 1 :(得分:0)

这是一种填充列表的方法,因此它最终会显示您想要的内容:

lis = range(3)
print "1st time list", lis

for i in range(len(lis)):
    j = lis[i]
    lis[i] = [j, j]

print lis  # -> [[0, 0], [1, 1], [2, 2]]

有更短更快的方法可以做到这一点,但由于它不清楚你想要完成什么,我还没有展示它们。

答案 2 :(得分:0)

如果你想创建类似[[0,0],[1,1],[2,2],......]的东西

我会这样做,

print [[i, i] for i in xrange(n)]

其中n是您想要的此类条目的数量。在您的第一个示例中,n = 3

您可以阅读有关列表推导https://docs.python.org/2/tutorial/datastructures.html

的更多信息