我有一个超过 2000 个 xyz 坐标的列表,我只想在第一个值出现后立即重复一个值
[[-2000, 379, -1817]]
我要这个
[[-2000 379 -1817],
[-2000 379 -1817]]
但我只重复这个值,列表中没有其他值。
这个值的索引是 716
我有一个超过 2000 个 xyz 坐标的列表,我只想在第一个值出现后立即重复一个值
[[-2000, 379, -1817]]
我要这个
[[-2000 379 -1817],
[-2000 379 -1817]]
但我只重复这个值,列表中没有其他值。
这个值的索引是 716
你可以做(如果l
是你的清单)
l[716:716] = [l[716]]
只需将列表乘以一个整数。
[[-2000, 379, -1817]]*2
例子:
[[-2000, 379, -1817]]*2
#output: [[-2000, 379, -1817],
# [-2000, 379, -1817]]
注意:如果要更改值,假设您有以下内容:
a = [[-2000, 379, -1817]]
a = a*2
print a
#output: [[-2000, 379, -1817], [-2000, 379, -1817]]
a[0][0] = 10
print a
#output [[10, 379, -1817], [10, 379, -1817]]
这将仅创建一个副本,因此如果您修改一个副本,另一个将被修改。
现在,如果您想修改每个,而不创建副本,您可以执行以下操作:
a = [[10, 379, -1817] for i in range(2)]
#output: [[10, 379, -1817],
# [10, 379, -1817]]
a[0][0] = 3
print a
#output: [[3, 379, -1817],
# [10, 379, -1817]]
类似的东西l[:717]+l[716:]
应该可以工作。
使用切片。例如,在这里您要重复索引 1 处的项目:
>>> lis = [[1], [2], [3]]
>>> lis[1:2] = [lis[1][:] for _ in xrange(2)]
>>> lis
[[1], [2], [2], [3]]
>>> lis[1] is lis[2] #both lists are different objects.
False
您可以使用切片插入尽可能多的项目:
>>> lis = [[1], [2], [3]]
>>> lis[1:2] = [lis[1][:] for _ in xrange(4)]
>>> lis
[[1], [2], [2], [2], [2], [3]]
[:]
返回列表的浅表副本。因此,修改lis[1]
不会影响lis[2]
,但如果lis[1]
也包含可变对象,则使用copy.deepcopy
.
如果您希望新项目只是对原始对象的引用,请删除[:]
.
其次,如果它只是一个项目,那么你也可以使用list.insert
:
>>> lis = [[1], [2], [3]]
>>> lis.insert(2, lis[1][:])
>>> lis
[[1], [2], [2], [3]]
帮助list.insert
:
insert(...)
L.insert(index, object) -- insert object before index
如果要在列表中插入元素,请执行以下操作:
首先,创建一个测试列表:
>>> li=[list(t) for t in zip(*[iter(range(27))]*3)]
>>> li
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20], [21, 22, 23], [24, 25, 26]]
然后你可以像这样插入一个重复的元素:
>>> li.insert(2,li[2])
>>> li
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20], [21, 22, 23], [24, 25, 26]]
^^^^^^^