2016-03-14 5 views
1

Если, например, у меня есть glider = [[0,0,0,0],[1,2,3,4],[0,1,3,4],[0,0,0,0]], как я могу удалить первый и последний список, а также первый и последний символы в списке, если вложенные списки будут отличаться. После этого это будет выглядеть так.Удаление определенных столбцов и строк из вложенного списка

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

Например, можно не просто использовать функцию del, так как размеры будут меняться. ex: [[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]]

Это небольшая часть более крупной программы, но она меня озадачила. Может быть, лучшим способом было бы создать совершенно новый список? Спасибо.

ответ

2

Вы можете сделать это, используя нарезку и временный список:

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]] 
2

Вы можете создать новый список с заданными условиями

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

Это не удаляет последовательные одинаковые элементы. – loutre

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 = [] 
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) 
Смежные вопросы