在Python中,切掉列表中每个(列表)元素的第一个元素

在Python中,切掉列表中每个(列表)元素的第一个元素,python,list,numpy,slice,Python,List,Numpy,Slice,假设我们有一个列表: a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 然后我想通过切掉列表中每个元素的第一个元素来创建一个新列表: b = a[][1:] b = [first,last for first,*middle,last in a] 显然,上述方法不起作用,但我希望b现在是: [[2, 3], [5, 6], [8, 9]] 当然,我可以循环使用它,但我想知道的是,是否有可能以类似于我在上面错误地尝试过的方式来使用它。另外,是否有更好的/好的方法来

假设我们有一个列表:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
然后我想通过切掉列表中每个元素的第一个元素来创建一个新列表:

b = a[][1:]
b = [first,last for first,*middle,last in a]
显然,上述方法不起作用,但我希望b现在是:

[[2, 3], [5, 6], [8, 9]]
当然,我可以循环使用它,但我想知道的是,是否有可能以类似于我在上面错误地尝试过的方式来使用它。另外,是否有更好的/好的方法来使用numpy执行此操作,在这种情况下,不需要像我尝试的那样通过切片来执行此操作?

您可以使用:

演示:

您可以使用:

演示:


使用numpy索引/切片表示法,可以使用逗号为每个维度的切片进行分隔:

import numpy as np
a = np.array([[1,2,3],[1,2,3],[1,2,3]])
print a[:,1:]
输出:

[[2 3]
 [2 3]
 [2 3]]
有关numpy索引的更多信息,请参阅:

使用numpy索引/切片表示法,可以使用逗号为每个维度的切片进行分隔:

import numpy as np
a = np.array([[1,2,3],[1,2,3],[1,2,3]])
print a[:,1:]
输出:

[[2 3]
 [2 3]
 [2 3]]
有关numpy索引的更多信息,请参阅:

在python 3中,您还可以使用*

b = [x for _,*x in a]
这种方法更加灵活,因为您可以将内部列表的第一个和最后一个元素放在左侧,而不管列表有多长:

b = a[][1:]
b = [first,last for first,*middle,last in a]

在Python3中,还可以使用*

b = [x for _,*x in a]
这种方法更加灵活,因为您可以将内部列表的第一个和最后一个元素放在左侧,而不管列表有多长:

b = a[][1:]
b = [first,last for first,*middle,last in a]

你们都是对的,列表理解是一个好主意,但我明确指出我更喜欢一个好的numpy方法,而你们完全按照我想要的方式来做,所以我必须将此设置为可接受的答案。谢谢!你们都是对的,列表理解是一个好主意,但我明确指出我更喜欢一个好的numpy方法,而你们完全按照我想要的方式来做,所以我必须将此设置为可接受的答案。谢谢!你是对的,我知道这一点,但我不想做列表理解和循环等,我还指定我更喜欢numpy解决方案。无论如何谢谢你!你是对的,我知道这一点,但我不想做列表理解和循环等,我还指定我更喜欢numpy解决方案。无论如何谢谢你!在各地的python列表和numpy数组之间进行转换不是一个好主意——这需要相当多的CPU。你应该尽量减少这些转换。你的意思是如果我已经在一个numpy数组中获得了所有内容,那么切片一个numpy数组不是一个好主意吗?不,我的意思是如果你从一个列表转换到一个numpy数组只是为了做切片,然后再转换回一个列表。使用列表理解可能会更快,因为即使numpy切片非常快,来回转换也非常慢。在各地的python列表和numpy数组之间进行转换不是一个好主意-它需要相当多的CPU。你应该尽量减少这些转换。你的意思是如果我已经在一个numpy数组中获得了所有内容,那么切片一个numpy数组不是一个好主意吗?不,我的意思是如果你从一个列表转换到一个numpy数组只是为了做切片,然后再转换回一个列表。使用列表理解可能会更快,因为即使numpy切片非常快,来回转换也非常慢。