我需要帮助确定如何解决从嵌套列表中删除"列"以进行修改的问题.
说我有
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)
如果要提取该列以供以后使用,在将其从原始列表中删除时,请使用列表推导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的答案
您可以使用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)
注意:此答案中建议的所有这些都不会影响原始列表。他们将生成没有不需要的元素的新列表。