Python 2D列表切片

时间:2015-11-14 22:26:52

标签: python list python-2.7 slice

我环顾四周,找不到任何具体的内容,所以这里有:

我有一份清单清单:

S = [[3,4],[6,7],[10,12]]

我想将第i个索引元素的第0个索引添加到另一个列表的末尾:

R = [5,6,7]

通常我会说:1D列表:

R = R + S[i:]

并从第i个索引中获取所有元素,但我想要2D S的第i个索引的第0个索引。如果我们从i = 1开始,我最终会得到:

R = [5,6,7,6,10]

另外,我不想使用for循环我想要一个可以工作的列表切片方法(如果有的话),因为它需要在一定范围内。

2 个答案:

答案 0 :(得分:2)

您可以使用zip转置矩阵:

>>> S
[[3, 4], [6, 7], [10, 12]]
>>> zip(*S)
[(3, 6, 10), (4, 7, 12)]

然后切换转置:

>>> j=0
>>> i=1
>>> zip(*S)[j][i:]
(6, 10)

元组是可迭代的,因此连接将与列表一起使用:

>>> R = [5,6,7]
>>> R+=zip(*S)[j][i:]
>>> R
[5, 6, 7, 6, 10]

答案 1 :(得分:1)

正如@jonrsharpe所说,numpy会为你做到这一点:

import numpy as np
# Create two arrays
S = np.asarray([[3,4],[6,7],[10,12]])
R = np.asarray([5, 6, 7])
# Slice the S array
i = 1
sliced_S = S[i:, 0]
# Concatenate the arrays
R = np.concatenate((R, sliced_S))

特别关注numpy令人印象深刻的documentationindexing