python - 在遍历列表时删除值的最有效方法

标签 python list loops

我有一个数据集,其中包含来自多个不同主题的 X、Y 坐标。所以主题 1 到 n 每个都有一个单独的 XY。我将所有 X 和 Y 坐标附加到单独的列表列表中,称为 plot .因此,一份 list 用于 X,一份用于每个主题的 Y。

示例输入(3 个科目):

Subject 1_X Subject 1_Y Subject 2_X Subject 2_Y Subject 3_X Subject 3_Y
11          45          34          67          8           26
12          46          33          65          7           25

示例输出:

plot[0] = [[11,34,8],[12,33,7]] #X's
plot[1] = [[45,67,26],[46,65,25]] #Y's

在此之前,我想在 X 值低于某个阈值(在本例中为 10)时同时删除 X 和相应的 Y。下面的示例输出:(主题 3 已删除)

plot[0] = [[11,34],[12,33]] #X's
plot[1] = [[45,67],[46,65]] #Y's

这里复制了这个过程:

data = [random.sample(range(80), 40) for _ in range(75000)] #Similar size and format

plot = [[],[]]

n = 0
for row in data :
    if n == 0 :
        n+=1
        continue
    x_data = []
    y_data = []
    for (x,y) in [(0,1),(2,3), (4,5), (6,7), (8,9), (10,11), (12,13), (14,15), (16,17), (18,19), (20,21), (22,23), (24,25), (26,27), (28,29), (30,31), (32,33), (34,35), (36,37), (38,39)] : 
        xcoord = float(row[x])
        ycoord = float(row[y])
        if xcoord >= 10 :
            x_data.append(xcoord)
            y_data.append(ycoord)
            plot[0].append(x_data)
            plot[1].append(y_data)

这可以完成工作,但我使用这些列表来创建动画散点图。这是非常慢的。

如果我删除消除值 < 10 的函数并优化重复项,它的执行速度要快得多。

n=0
for row in data :
    if n == 0 :
        n+=1
        continue 
plot[0].append(list(map(float, row[1:41][::2])))
plot[1].append(list(map(float, row[0:40][::2]))) 

是否有更快、更有效的方法来更快地迭代和删除特定值?

我曾尝试从每个源中单独删除值,然后在末尾附加,但这比我目前的效率低。

使用以下方法调用散点图:

scatter = ax.scatter(plot[0][0], plot[1][0], c=['blue'])

动画调用如下:

def animate(i) :
    scatter.set_offsets.([[plot[0][0+i][0], plot[1][0+i][0]]])

最佳答案

在这种情况下,您最好使用 numpy, 因为如果我理解正确的话,您的代码可以简化为以下内容:

import numpy as np

data = np.random.randint(0, 80, size=(2, 75000))  # Get a 2x75000 array of values in range [0, 79]

valid = data[0] >= 10  # Mask based on X-value
xdata, ydata = data[:, valid]  # Cut the parts you want

关于python - 在遍历列表时删除值的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921509/

相关文章:

python - 出于我的目的,在 heroku 上 headless 驱动浏览器的最佳方法是什么?

python - 使用 Python 将 base64 编码的谷歌服务帐户 key 转换为 JSON 文件

c# - List<List<int>>的组合

c# - 在 javascript 中循环 C# 列表

c# - 如何使用 LinQ 搜索不在 char 数组中的字符串

python - 正向/反向运动学计算 2DOF python

python - Pandas 对包含特定值的行进行加权平均值

java - 给定三个整数a、b和n,输出以下序列: a+20b, a+20b+21b,……,a+20b+21b+...+2n−1ba+20b,a+20b+21b,。 .....,a+20b+21b+...+2n−1b

JavaScript - 更新变量以不断更改文件内容

PHP 查找两点之间的坐标