从Python中的嵌套列表中删除列

Cri*_*sis 18 python list

我需要帮助确定如何解决从嵌套列表中删除"列"以进行修改的问题.

说我有

L = [[1,2,3,4],
     [5,6,7,8],
     [9,1,2,3]]
Run Code Online (Sandbox Code Playgroud)

我想删除第二列(所以值2,6,1)得到:

L = [[1,3,4],
     [5,7,8],
     [9,2,3]]
Run Code Online (Sandbox Code Playgroud)

我只是拿出一个专栏来解决如何修改列表的问题.我以前做过类似的事吗?除了我们正在打印它,当然它在这种情况下不起作用,因为我相信中断与列表中我想要的其余值冲突.

def L_break(L):

i = 0
while i < len(L):
    k = 0
    while k < len(L[i]):
        print( L[i][k] , end = " ")
        if k == 1:
            break
        k = k + 1
    print()
    i = i + 1
Run Code Online (Sandbox Code Playgroud)

那么,你将如何修改这个嵌套列表?我的想法是否正确地将其与我发布的代码进行比较,或者这需要不同的东西吗?

ars*_*jii 16

您可以使用del以下命令从每行中删除相应的元素:

L = [[1,2,3,4],
     [5,6,7,8],
     [9,1,2,3]]

for row in L:
    del row[1]  # 0 for column 1, 1 for column 2, etc.

print L
# outputs [[1, 3, 4], [5, 7, 8], [9, 2, 3]]
Run Code Online (Sandbox Code Playgroud)


koj*_*iro 6

如果要提取该列以供以后使用,在将其从原始列表中删除时,请使用列表推导pop:

>>> L = [[1,2,3,4],
...       [5,6,7,8],
...       [9,1,2,3]]
>>> 
>>> [r.pop(1) for r in L]
[2, 6, 1]
>>> L
[[1, 3, 4], [5, 7, 8], [9, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

否则,只需循环遍历列表并删除不再需要的字段,如arshajii的答案


the*_*eye 6

您可以使用operator.itemgetter专为此目的而创建的 。

from operator import itemgetter
getter = itemgetter(0, 2, 3)            # Only indexes which are needed
print(list(map(list, map(getter, L))))
# [[1, 3, 4], [5, 7, 8], [9, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

您可以像这样在列表理解中使用它

print([list(getter(item)) for item in L])
# [[1, 3, 4], [5, 7, 8], [9, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

你也可以使用嵌套列表理解,如果索引为 1,我们跳过元素,像这样

print([[item for index, item in enumerate(items) if index != 1] for items in L])
# [[1, 3, 4], [5, 7, 8], [9, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

注意:此答案中建议的所有这些都不会影响原始列表。他们将生成没有不需要的元素的新列表。


ida*_*hmu 5

用途map-lambda:

print map(lambda x: x[:1]+x[2:], L)
Run Code Online (Sandbox Code Playgroud)