我正在准备一份清单清单。初始列表可以包含任意数量的条目,但子列表每个包含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']]
我尝试了各种各样的变化,但结果输出不正确。
提前致谢 鲍勃
答案 0 :(得分:4)
您正在永久变异并附加相同的list
对象add_colony
。 colony
中的所有列表都是对同一对象的引用。您必须为每个循环迭代创建一个新列表:
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']