簡體   English   中英

從 Python 中的嵌套列表中刪除一列

[英]Remove a column from a nested list in Python

我需要幫助弄清楚如何解決從嵌套列表中刪除“列”以對其進行修改的問題。

說我有

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]]

我被困在如何通過取出一列來修改列表。 我以前做過類似的事情嗎? 除了我們打印它之外,當然在這種情況下它不起作用,因為我相信 break 與列表中我想要的其余值沖突。

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

那么,您將如何修改這個嵌套列表? 將它與我發布的代碼進行比較,我的想法是否正確,或者這是否需要一些不同的東西?

您可以使用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]]

如果您想提取該列供以后使用,同時將其從原始列表中刪除,請使用帶有pop的列表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 的回答

您可以使用專為此目的而創建的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]]

您還可以使用嵌套列表理解,如果索引為 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]]

注意:此答案中建議的所有這些都不會影響原始列表。 他們將生成沒有不需要的元素的新列表。

使用map-lambda

print map(lambda x: x[:1]+x[2:], L)

這是一種方法,更新以采納 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

當您執行del 時,它將刪除該索引並重置該索引,因此您必須減少該索引。 在這里,我使用計數來減少和重置我們擁有的索引列表中的計數。 希望這可以幫助。 謝謝

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

count = 0
for i in remove_cols_index:
    i = i-count
    count = count+1

    del nested_list[i]

print (nested_list)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM