我正在试图找出一种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]
]
]
]
]
感谢!!!
答案 0 :(得分:1)
我不知道可以使用的单线程,因为进入最深的列表有点棘手。只要输入至少是列表列表,下面的底部函数将删除第n个元素。 (使用n=-1
删除最后一个元素。)
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
编辑:实际上,我的原始答案并没有以相同的深度返回列表。进行编辑,以使返回的列表与原始列表具有相同的深度,只需删除元素。
答案 1 :(得分:0)
For list in example1:
list = list.del(len((list)-1))
我在手机上而不是我的电脑,所以我不能保证这样做。
答案 2 :(得分:0)
如果您想以一种简单的方式逐步理解它 它是如何工作的
。这只是因为这个人想要一个解释并不是一个好的做法很难
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]
答案 3 :(得分:0)
首先,我们使用递归函数来确定列表嵌套的深度,然后我们使用简单的循环来降低我们想要修剪的级别,使用切片分配从每个最里面的子列表中删除最后一项。
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]]]]]