如何通过索引从列表中删除元素

时间:2017-06-19 23:04:17

标签: python python-3.x numpy filter

我是一名蟒蛇初学者。我在包含我的x和y值的文本文件(.txt)中给出的数据。 x和y值以制表符分隔。

(x values)    (y values)
113           0
116           2
119           0
214           3
220           0
230           3
290           5

我的任务是在y值为0时删除x和y值。

import numpy as np

files = ['my_data.txt']

for file in files:
    data = np.loadtxt(file,unpack=True)


y_value = data[1,0:]

y_list= list(y_value)

a= np.where(y_list==0)
b = str(a)
d= del.y_list(b) 

我尝试做的是识别包含零的索引,并根据索引删除这些元素。给定的代码似乎不起作用。错误消息显示d= del.y_list(b)包含无效语法。

有人可以解释d= del.y_list(b)出了什么问题吗?或者,请随意分享任何其他更有效的方法来完成任务。

(上面的代码描述了仅从y中删除零元素。我认为如果这适用于y值,我可以使用data[0,0:]重新调用x值。)

2 个答案:

答案 0 :(得分:5)

编译器说:

del.y_list(b)

语法无效。通常一个人写道:

del variable
del variable[index]
del variable.attribute

删除该变量的变量,索引或属性。然而,我不明白为什么你这么努力。你可以简单地写一下:

import numpy as np

files = ['my_data.txt']

for file in files:
    data = np.loadtxt(file,unpack=True)
    data_filtered = data[:,data[1,:] != 0]

现在data_filtered将包含 numpy矩阵,只包含y不等于零的行。这将是有效的,而且你仍然可以对该矩阵执行各种操作,因为它是一个numpy矩阵。

对于您的样本输入,这会生成:

>>> data[:,data[1,:] != 0]
array([[ 116.,  214.,  230.,  290.],
       [   2.,    3.,    3.,    5.]])

答案 1 :(得分:1)

这是因为您使用del错误。相反,请尝试以下方法:

result = []
with open('my_data.txt', 'r+') as f:
    for line in f:
        if not any([item == 0 for item in line.split()]):
            result.append(line)
    f.write(''.join(result))