带列表的列表的序列号

2024-10-16 20:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

ie. 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']]

我尝试了各种各样的变化,但最终输出不正确。你知道吗

提前谢谢 鲍勃


Tags: 数据代码目的add标题列表数量条目
3条回答

你好,墨尔本大学的同学们!你知道吗

正如@schwobasegll所提到的,您需要在循环的每次迭代中创建一个新的list对象,或者您只是不断地重复附加同一个对象。您也可以在每个列表的开始处使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)]

祝你好运!你知道吗

您正在永久地变异并附加相同的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个线性列表comp,对原始列表进行变异,而不将其保存到变量中(有点奇怪):

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

print(colony)输出

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

相关问题 更多 >