[英]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.