[英]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
您可以使用列表理解。 這是一個輸入和輸出示例。 這個想法很簡單:對於每個子列表,如果它們超出期望的限制,只需檢查min
和max
。
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.