带列表的列表的序列号

时间:2017-12-26 10:13:06

标签: python

我正在准备一份清单清单。初始列表可以包含任意数量的条目,但子列表每个包含3个条目,例如:

colony =  [['A', 'B', 'C'], [1, 'b', 'c'], [2, 'b', 'c'], [3, 'b', 'c'], [4, 'b', 'c'], [5, 'b', 'c']]

每个子列表中的第一个条目是条目的序列号,需要是顺序的,

  

即。 1,2,3,4,5,6 ......

A,B和C是列标题,数据在后续列表中。我的困难是如果我需要添加的子列表的数量是5,那么每个条目的序列号是5.如何更改我的代码以在每个子列表中插入正确的序列号:

colony = [['A', 'B', 'C']]
add_colony = [0, 0, 0]

R = 5
i = 1

for i in range(R):
    add_colony[0] = i + 1
    add_colony[1] = 'b'
    add_colony[2] = 'c'
    colony.append(add_colony)
    i = i + 1

print()
print('colony = ', colony)

产生

colony =  [['A', 'B', 'C'], [5, 'b', 'c'], [5, 'b', 'c'], [5, 'b', 'c'], [5, 'b', 'c'], [5, 'b', 'c']]

colony =  [['A', 'B', 'C'], [1, 'b', 'c'], [2, 'b', 'c'], [3, 'b', 'c'], [4, 'b', 'c'], [5, 'b', 'c']]

我尝试了各种各样的变化,但结果输出不正确。

提前致谢 鲍勃

3 个答案:

答案 0 :(得分:4)

您正在永久变异并附加相同的list对象add_colonycolony中的所有列表都是对同一对象的引用。您必须为每个循环迭代创建一个新列表:

for i in range(R):
    add_colony = [0, 0, 0]  # without this line ...
    add_colony[0] = i + 1   # ... this mutation will affect all the references in colony
    add_colony[1] = 'b'
    add_colony[2] = 'c'
    colony.append(add_colony)

或更短:

for i in range(R):
    colony.append([i + 1, 'b', 'c'])

答案 1 :(得分:0)

墨尔本大学同学你好!

正如@schwobaseggl所提到的,你需要在循环的每次迭代中创建一个新的列表对象,或者你只是一遍又一遍地追加同一个对象。您也可以让add_colony在每个列表的开头都设置默认值['b', 'c']insert()新的i值。

以下是一个例子:

colony = [['A', 'B', 'C']]

R = 5

for i in range(R):
    add_colony = ['b', 'c']
    add_colony.insert(0, i+1)
    colony.append(add_colony)

print('colony = ', colony)

哪个输出:

colony =  [['A', 'B', 'C'], [1, 'b', 'c'], [2, 'b', 'c'], [3, 'b', 'c'], [4, 'b', 'c'], [5, 'b', 'c']]

你也可以使用列表理解:

colony = [['A', 'B', 'C']] + [[i + 1] + ['b', 'c'] for i in range(R)]

祝你好运!

答案 2 :(得分:0)

1个班轮列表组合,它会改变原始列表而不将其保存到变量(有点奇怪):

[colony.append([i, 'b', 'c']) for i in range(1, R + 1)]

print(colony)输出

  

[[' A',' B',' C'],[1,' b',' c& #39;],[2,' b',' c'],[3,' b',' c'],[ 4,' b',' c'],[5,' b',' c']