从嵌套列表中删除特定的列和行

Removing specific columns and rows from nested list

例如,如果我有 glider = [[0,0,0,0],[1,2,3,4],[0,1,3,4],[0,0,0,0]],如果嵌套列表不同,我将如何删除第一个和最后一个列表以及每个列表的第一个和最后一个字符。之后就是这个样子了

glider = [[2,3],[1,3]]

例如,我不能只使用 del 函数,因为维度会有所不同。例如:[[0,0,0,0,0],[1,2,3,4,5],[0,1,2,3,4],[0,0,0,0,0]] , [[0,0,0],[1,2,3],[0,0,0]]

这是一个更大程序的一小部分,但它让我感到难过。也许更好的方法是创建一个全新的列表?谢谢。

您可以使用切片和临时列表来做到这一点:

glider = [[0,0,0,0],[1,2,3,4],[0,1,3,4],[0,0,0,0]]

glider = glider[1:-1]

templist = []

for i in glider:
    templist.append(i[1:-1])
glider = templist
del templist

输出:

>>> glider
[[2, 3], [1, 3]]

您可以根据给定条件创建新列表

glider = [[y for y in x[1:-1]] for x in glider[1:-1]]

你想要这样的东西吗:

a = [[0,0,0,0,0],[1,2,3,4,5],[0,1,2,3,4],[0,0,0,0,0]]
b = [k[1:-1] for k in a[1:-1]]
# remove consecutive equal items
if b:
    res = [b[0]] + [k for i, k in enumerate(b[1:], 1) if k != b[i-1]]
else:
    res = []

试试这个:

glider = [[0,0,0,0],[1,2,3,4],[0,1,3,4],[0,0,0,0]]

def my_strip(lst):
    if isinstance(lst, list):
        lst = lst[1:-1]
        for idx, val in enumerate(lst):
            lst[idx] = my_strip(val)
    return lst

print my_strip(glider)