6

我有 2 个号码列表,一个叫xVar,另一个叫yVar。我将使用这两个元素在图表上绘制 X 和 Y 值。它们都具有相同数量的元素。

通常,我只会绘制

ax.scatter(xVar,yVar,s=2,color='tomato');

我想从中删除yVar超过某个值的数据,例如所有yVar值超过的数据100,但我也想删除关联的xVar值。有人可以建议一种方法来创建 2 个新变量来删除所有值以及yVar与它们关联100的值吗?xVar然后我可以在我的绘图线中将xVar&替换yVar为新变量。

再次感谢大家,

4

3 回答 3

14

每当您想对两个(或更多)列表的相应值做某事时,这就是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)]
于 2013-09-26T01:05:16.397 回答
1

不写代码,找到要移除的y的索引,保存索引,移除y值,然后移除相同索引号处的x值。

于 2013-09-26T01:01:51.307 回答
0

查找与您要保留的数据相对应的索引:

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]
于 2013-09-26T01:05:02.993 回答