[英]python: How to remove values from 2 lists based on what's in 1 list
我有2個數字列表,一個叫做xVar
,另一個叫做yVar
。 我將使用這兩個元素在圖形上繪制X和Y值。 它們都具有相同數量的元素。
通常,我只是情節
ax.scatter(xVar,yVar,s=2,color='tomato');
我想從yVar
中刪除超過某個值的數據,例如yVar
值超過100
所有數據,但我還想刪除關聯的xVar
值。 有人可以建議一種方法來創建2個新變量,刪除yVar
超過100
的xVar
值以及與它們相關的xVar
值嗎? 然后我可以在我的繪圖線xVar
和yVar
替換為新變量。
再次感謝All,
每當你想對兩個(或更多)列表的相應值做某事時,那就是zip
的用途。 它為您提供了一個列表,列出了每個索引的相應值。
所以,在這種情況下, zip
兩個列表一起,然后過濾壓縮的列表,然后(與他們解壓zip
再次,如文檔說明):
xVar, yVar = zip(*((x, y) for x, y in zip(xVar, yVar) if y <= 100))
如果這令人困惑,讓我一步一步地說明:
>>> xVar = [1, 200, 300, 10]
>>> yVar = [150, 100, 50, 200]
>>> xyVar = zip(xVar, yVar)
>>> xyVar
[(1, 150), (200, 100), (300, 50), (10, 500)]
>>> xyFiltered = [(x, y) for x, y in xyVar if y <= 100]
>>> xyFiltered
[(200, 100), (300, 50)]
>>> xVar, yVar = zip(*xyFiltered)
[(200, 300), (100, 50)]
在不編寫代碼的情況下,找到要刪除的y的索引,保存索引,刪除y值,然后刪除相同索引號的x值。
查找與您要保留的數據相對應的索引:
ind = [i for i in range(len(yVar)) if yVar[i] < 100]
並只使用這些點:
yVar = [yVar[i] for i in ind]
xVar = [xVar[i] for i in ind]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.