-1

我有一个超过 2000 个 xyz 坐标的列表,我只想在第一个值出现后立即重复一个值

[[-2000, 379, -1817]]

我要这个

[[-2000 379 -1817],
[-2000 379 -1817]]

但我只重复这个值,列表中没有其他值。

这个值的索引是 716

4

5 回答 5

2

你可以做(​​如果l是你的清单)

l[716:716] = [l[716]]
于 2013-11-04T20:50:24.813 回答
2

只需将列表乘以一个整数。

[[-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]]
于 2013-11-04T20:50:51.607 回答
1

类似的东西l[:717]+l[716:]应该可以工作。

于 2013-11-04T20:50:42.420 回答
0

使用切片。例如,在这里您要重复索引 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
于 2013-11-04T20:57:52.663 回答
0

如果要在列表中插入元素,请执行以下操作:

首先,创建一个测试列表:

>>> 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]]
                        ^^^^^^^
于 2013-11-04T21:02:52.623 回答