簡體   English   中英

從列表Python列表中刪除列表

[英]Remove a list from a list of lists Python

我有一份清單清單:

[[0.0,3.3, 4.9, 7.5], [4, 6, 90, 21, 21.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000]]

如果該子列表包含給定范圍之外的元素,我想從列表中刪除子列表。

例如; 范圍= 3,15

因此,如果子列表包含-69,-17,0,1,2,15.1,26.99,即任何超出該范圍的元素,我希望刪除該子列表。

應返回的輸出是列表列表,其中所有子列表僅包含該范圍內的值:

[[6, 5, 7, 13, 12], [4, 6, 10], [9, 9, 4, 5, 11], [4, 4]]

我知道這里有類似的問題,例如:

從列表列表中刪除子列表

Python - 從列表列表中刪除列表(與.pop()類似的功能)

我無法讓這些解決方案起作用。

我的目標是不刪除重復的列表:有很多問題,但這不是我的目標。

我的代碼:

max_value = 15
min_value = 3

for sublist in my_list:
  for item in sublist:
    if(item < min_value):
        my_list.pop(sublist)
    if(item > max_value):
        my_list.pop(sublist)
print(my_list)

錯誤:

TypeError: 'list' object cannot be interpreted as an integer

您可以使用列表理解。 這是一個輸入和輸出示例。 這個想法很簡單:對於每個子列表,如果它們超出期望的限制,只需檢查minmax

list_1 = [[0.0,3.3, 4.9, 7.5], [4, 6, 9, 11, 12.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000], ]

left = 3
right = 15

list_2 = [i for i in list_1 if (min(i)>=left and max(i)<=right)]
print (list_2)
# [[4, 6, 9, 11, 12.1]]

你的錯誤來自於使用.pop()方法,當你真正意味着.remove()時,它需要一個整數索引作為它的參數。 但是,即使在將此更正為.remove()您也可能會遇到錯誤,因為在迭代它時嘗試從列表中刪除項目。 更簡潔的方法是列表理解:

my_list = [[0.0,3.3, 4.9, 7.5], [4, 6, 90, 21, 21.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000]]
min_value = 3
max_value = 100

my_list[:] = [sublist for sublist in my_list if all(min_value <= x <= max_value for x in sublist)]

列表理解

new_list = [sublist for sublist in list if not any(el in range(a, b) for el in sublist)]

暫無
暫無

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

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