python从列表列表中选择范围

python从列表列表中选择范围,python,list,Python,List,是否有一种pythonic(请不要用numpy!)方法从列表中选择列表的子集列表?在MATLAB中,我试图模仿的行为可以用A(2:7,5:8)这样的例子来说明 这不是家庭作业问题,只是在寻找一个干净的解决方案 下面是一个具体的例子: A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] select(A, (1, 3), (0, 3)) 应该让步 [[2, 3], [5, 6], [8, 9]] select(A,(1,3)、(0,3))可以实现为[0:3]中x的[x[

是否有一种pythonic(请不要用numpy!)方法从列表中选择列表的子集列表?在MATLAB中,我试图模仿的行为可以用
A(2:7,5:8)
这样的例子来说明

这不是家庭作业问题,只是在寻找一个干净的解决方案

下面是一个具体的例子:

A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
select(A, (1, 3), (0, 3))
应该让步

[[2, 3], [5, 6], [8, 9]]
select(A,(1,3)、(0,3))
可以实现为[0:3]中x的
[x[1:3]]

>>> A = [1, 2, 3],[4, 5, 6],[7, 8, 9]
>>> [x[1:3] for x in A[0:3]]
[[2, 3], [5, 6], [8, 9]]
>>> 
select(A,(1,3)、(0,3))
可以实现为[0:3]中x的
[x[1:3]]

>>> A = [1, 2, 3],[4, 5, 6],[7, 8, 9]
>>> [x[1:3] for x in A[0:3]]
[[2, 3], [5, 6], [8, 9]]
>>> 

您可以将参数传递给切片:

def select(lst, subselect, select):
    return [sublst[slice(*subselect)] for sublst in lst[slice(*select)]]
演示:

您甚至可以使用
None
来指示切片的默认值(因此
start
0
stop
参数的输入列表长度),或者只传入一个参数来指定
stop
参数:

>>> select(A, (1, None), (3,))
[[2, 3], [5, 6], [8, 9]]
第三个参数提供了指定步幅的选项。如果步幅为负数,则列表反转:

>>> select(A, (1, None), (None, 3, 2))
[[2, 3], [8, 9]]
>>> select(A, (1, None), (None, None, -1))
[[8, 9], [5, 6], [2, 3]]

您可以将参数传递给切片:

def select(lst, subselect, select):
    return [sublst[slice(*subselect)] for sublst in lst[slice(*select)]]
演示:

您甚至可以使用
None
来指示切片的默认值(因此
start
0
stop
参数的输入列表长度),或者只传入一个参数来指定
stop
参数:

>>> select(A, (1, None), (3,))
[[2, 3], [5, 6], [8, 9]]
第三个参数提供了指定步幅的选项。如果步幅为负数,则列表反转:

>>> select(A, (1, None), (None, 3, 2))
[[2, 3], [8, 9]]
>>> select(A, (1, None), (None, None, -1))
[[8, 9], [5, 6], [2, 3]]

您能提供输入列表和预期输出吗?您可以使用递归切片,如:
myList[1][3]
为什么参数会导致预期输出像
range
函数一样,包含第一个数字,第二个被排除。您能提供输入列表和预期输出吗?您可以使用递归切片,如:
myList[1][3]
为什么参数会导致预期输出像
range
函数一样,第一个数字被包含,第二个被排除。