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

时间:2016-03-14 09:56:19

标签: python python-3.x nested-lists

例如,如果我有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]]

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

4 个答案:

答案 0 :(得分:2)

您可以使用切片和临时列表来执行此操作:

+-----------+-----------------------+-----------------+-------------------------+
| ChapterID |      ChapterName      | TestAllotmentID |       UpdatedDate       |
+-----------+-----------------------+-----------------+-------------------------+
|        52 | HTML Basics - Part II |              37 | 2016-03-14 13:12:53.000 |
|        50 | HTML Basics - Part I  |              28 | 2016-03-11 18:45:51.000 |
+-----------+-----------------------+-----------------+-------------------------+

输出:

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

答案 1 :(得分:2)

您可以使用给定条件创建新列表

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

答案 2 :(得分:2)

试试这个:

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)

答案 3 :(得分:0)

你想要这样的东西:

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 = []