簡體   English   中英

從列表的變量列表中刪除第 N 個項目

[英]Remove Nth item from a variable list of lists

我試圖找出一種 Pythonic 方法來從列表的變量列表中刪除第 N 個項目。

例如,我將如何以一種方法、一個襯墊、漂亮的東西從具有可變深度的列表中刪除最后一個項目?

example1 = [
    [
        [1,2,3],
        [4,5,6]
    ]
]

expected_output_1 = [
    [
        [1,2],
        [4,5]
    ]
]

example2 = [
    [
        [
            [
                [1,2,3],
                [4,5,6]
            ]
         ]
    ]
]

expected_output_2 = [
    [
        [
            [
                [1,2],
                [4,5]
            ]
         ]
    ]
]

謝謝!!!

我不知道哪一種單行有效,因為進入最深的列表有點棘手。 只要輸入至少是一個列表列表(使用n=-1刪除最后一個元素),下面的底部函數就會刪除 nt'h 元素。

from collections import Sequence
from itertools import chain, count

def depth(seq):
    for level in count():
        if not seq:
            return level
        seq = list(chain.from_iterable(s for s in seq if isinstance(s, Sequence)))

def remove_nth_from_deepest_list(lst, n):
    d = depth(lst)
    for _ in range(d - 2):
        lst = lst[0]
    for sublist in lst:
        del sublist[n]
    for _ in range(d - 2):
        lst = [lst]
    return lst
For list in example1:
    list = list.del(len((list)-1))

我不能保證有效。

如果您想以簡單的方式逐步理解它,這就是它的工作原理

. 這只是因為這個人想要一個解釋,這不是一個好習慣

    for x in l: #looping first time
        for x1 in x: #looping to flatten
            for x2 in x1: #looping again to flatten the set
                for x3 in x2: #last loop to get a proper set of list
                    del x3[len(x3)-1] # deleting the last one by subtracting with length
                    print(x3) # printing result

l = [[[[[1,2,3],[4,5,6]]]]] 的預期輸出

[1, 2] [4, 5]

首先,我們使用遞歸函數來確定列表嵌套的深度,然后我們使用簡單的循環來深入到我們想要修剪的級別,使用切片分配從每個最里面的子列表中刪除最后一項。

example0 = [[1, 2, 3]]

example1 = [
    [
        [1,2,3],
        [4,5,6]
    ]
]

example2 = [
    [
        [
            [
                [1,2,3],
                [4,5,6]
            ]
         ]
    ]
]

def list_depth(seq, depth=0):
    if isinstance(seq, list):
        return list_depth(seq[0], depth + 1)
    return depth

for seq in (example0, example1, example2):
    print('original:', seq)
    t = seq
    for i in range(list_depth(seq) - 2):
        t = t[0]
    t[:] = [u[:-1] for u in t]
    print('trimmed: ', seq, '\n')

輸出

original: [[1, 2, 3]]
trimmed:  [[1, 2]] 

original: [[[1, 2, 3], [4, 5, 6]]]
trimmed:  [[[1, 2], [4, 5]]] 

original: [[[[[1, 2, 3], [4, 5, 6]]]]]
trimmed:  [[[[[1, 2], [4, 5]]]]] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM