簡體   English   中英

從python列表中刪除下一個元素

[英]Remove next elements from list in python

我有一個如下所示的列表:

['ABC ', '02:20', 123456, 123, '-', 123456, 123, 'DEF ', '-', 123456, 123, '-', 123456, 123, 'IFG', '-', 123456, 123, '-', 123456, 123, 'IJK', '03:40', 123456, 123, '-', 123456, 123, 'LOM', '-', 123456, 123, '03:00', 123456, 123]

如何根據條件刪除下兩個元素以及當前元素?

比如我想刪除-以及接下來的 2 個元素

for idx, val in enumerate(n1):
    if val == '-':
        del n1[idx]
        del n1[idx+1]
        del n1[idx+2]
        n1 = n1
        

但只有-從列表中刪除

  1. 第一個問題是,在執行del n1[idx] ,下一個值,以前在idx+1現在在位置idx因為它向前移動了,所以要刪除 3 個連續的元素,代碼將

    del n1[idx] del n1[idx] del n1[idx] # OR del n1[idx:idx+3]
  2. 但是當您在刪除時進行迭代時,您會錯過元素,並且您的代碼將返回以下內容,完成了 5 次刪除,但有 2 次未命中

    ['ABC ', '02:20', 123456, 123, 'DEF ', '-', 123456, 123, 'IFG', '-', 123456, 123, 'IJK', '03:40', 123456, 123, 'LOM', '03:00', 123456, 123]

一個解決方案是不迭代,而是檢查並刪除直到沒有'-'

while '-' in n1:
    idx = n1.index('-')
    del n1[idx:idx + 3]

您可以通過以下方式從列表中刪除元素,

del n1[idx:idx+2]

每次執行del n1[idx] ,都會從列表中刪除一個元素,因此刪除后的所有元素的索引都會改變。

因此,下面的del n1[idx+1]將刪除錯誤的元素。

為避免這種情況,您可以按索引的降序刪除元素:

del n1[idx+2]
del n1[idx+1]
del n1[idx]

(當然,您應該檢查idx+2idx+1是否仍在列表范圍內)。

只需循環並根據您的邏輯創建一個新列表。 見下文

lst = ['ABC ', '02:20', 123456, 123, '-', 123456, 123, 'DEF ', '-', 123456, 123, '-', 123456, 123, 'IFG', '-', 123456,
       123, '-', 123456, 123, 'IJK', '03:40', 123456, 123, '-', 123456, 123, 'LOM', '-', 123456, 123, '03:00', 123456,
       123]
idx = 0
lst1 = []
while idx < len(lst) - 1:
    if lst[idx] == '-':
        idx += 3
    else:
        lst1.append(lst[idx])
        idx += 1
print(lst1)

輸出

['ABC ', '02:20', 123456, 123, 'DEF ', 'IFG', 'IJK', '03:40', 123456, 123, 'LOM', '03:00', 123456]

不優雅但有效且易於理解,如果數據集很大,可以很容易地與 numba 一起使用。

n1 = ['ABC ', '02:20', 123456, 123, '-', 123456, 123, 'DEF ', '-', 123456, 123, '-', 123456, 123, 'IFG', '-', 123456, 123, '-', 123456, 123, 'IJK', '03:40', 123456, 123, '-', 123456, 123, 'LOM', '-', 123456, 123, '03:00', 123456, 123]

skip = 0
result = []
for idx, val in enumerate(n1):
    if val == '-':
        skip = 3
    else:
        skip -= 1
        if skip <= 0:
            result.append(val)

暫無
暫無

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

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