我需要帮助确定如何解决从嵌套列表中删除“列”以进行修改的问题。
说我有
L = [[1,2,3,4],
[5,6,7,8],
[9,1,2,3]]
我想删除第二列(所以值为2,6,1)以获得:
L = [[1,3,4],
[5,7,8],
[9,2,3]]
我一直坚持如何修改列表而只是取出一列。我以前做过类似的事吗?除了我们打印它,当然它在这种情况下不起作用,因为我认为中断与列表中我想要的其余值冲突。
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
那么,您将如何修改此嵌套列表? 我的思想是否正确地与我发布的代码进行比较,或者这需要不同的东西吗?
答案 0 :(得分:15)
您只需使用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]]
答案 1 :(得分: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]]
否则,只需遍历列表并删除不再需要的字段,如arshajii's answer
答案 2 :(得分:5)
使用map-lambda
:
print map(lambda x: x[:1]+x[2:], L)
答案 3 :(得分:3)
您可以使用为此目的而创建的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]]
你可以在像这样的列表理解中使用它
print([list(getter(item)) for item in L])
# [[1, 3, 4], [5, 7, 8], [9, 2, 3]]
你也可以使用嵌套的List Comprehension,如果索引是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]]
注意:此答案中建议的所有内容都不会影响原始列表。他们将生成没有不需要的元素的新列表。
答案 4 :(得分:2)
这是一种方式,更新以接受kojiro的建议。
>>> L[:] = [i[:1]+i[2:] for i in L]
>>> L
[[1, 3, 4], [5, 7, 8], [9, 2, 3]]
您可以将其概括为删除任何列:
def remove_column(matrix, column):
return [row[:column] + row[column+1:] for row in matrix]
# Remove 2nd column
copyofL = remove_column(L, 1) # Column is zero-base, so, 1=second column
答案 5 :(得分:1)
当您执行 del 时,它将删除该索引并重置该索引,因此您必须减少该索引。在这里,我使用计数来减少和重置索引列表中的计数。希望这可以帮助。谢谢
Col.HeaderText = My.Resources.Core.ResourceManager.GetString("DGV_" & Col.Name)
答案 6 :(得分:0)
[j.pop(1) for j in nested_list]
来自https://www.geeksforgeeks.org/python-column-deletion-from-list-of-lists/