Почему происходит «ValueError: list.remove (x): x not in list», если x существует? - PullRequest
0 голосов
/ 31 марта 2020

Это код, который открывает таблицу .csv и читает строку в строку, чтобы сохранить данные в две переменные, сохраненные в списке. Кроме того, я хочу отфильтровать некоторые данные листа (.csv), потому что они мне не нужны, и я фильтрую, применяя то, что ниже, есть x.remove (i) и y.remove (i), но они оба ошибаются, как я сообщил в названии. Что мне делать? Какую ошибку я делаю?

g=float(9.8)

x=[]
y=[]

dados = open('dados123.csv').readlines() #trocar para o nome_do_arquivo após testes de diagnóstico



def adiciona_dados():
    for i in range (len(dados)):
        if i !=0:  
            linha = dados[i].split(";")
            x.append(float(linha[0]))
            y.append(float(linha[1])*g)
        else:
            print('erro1')

len(x)
len(y)
adiciona_dados()



for i in y:  
    if y[i] < 30:

        x.remove(i)
        y.remove(i)              
    else:
        print('nada')

len(x)
len(y)

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Добро пожаловать в переполнение стека. У нас не было примера вашего dadoos123.csv файла. Но мы можем попытаться понять, что вы пытались сделать. Вот мое решение вашей проблемы:

import csv

g = 9.80

with open('dados123.csv', newline='') as dados_file:
    dados_reader = csv.reader(dados_file, delimiter=';')
    print('erro1')
    all_linha = list(dados_reader)
    x = [float(current_linha[0]) for current_linha in all_linha[1:] if float(current_linha[0]) >= 30]
    y = [float(current_linha[1]) * g for current_linha in all_linha[1:] if float(current_linha[0]) >= 30]

how_many_nada = (len(all_linha) - 1) - len(x)     # Could also been (len(all_linha) - 1) - len(y). No difference
for current_nada in range(how_many_nada):
    print('nada')

Это то, что вы пытались сделать?

0 голосов
/ 31 марта 2020

Оригинальный код:

for i in y:  
    if y[i] < 30:

        x.remove(i)
        y.remove(i)              
    else:
        print('nada')

Модифицированный код version1:

for i in y:  
    if i < 30:

        x.remove(i)
        y.remove(i)              
    else:
        print('nada')

В противном случае, Python list list remove () ищет указанный элемент в списке и удаляет первый соответствующий элемент. Но если два смежных элемента повторяются, первый элемент удаляется, а второй резервируется.

Модифицированный код version2 для повторного номера:

for i in y:
    if i < 30:
        while x.count(i)>0:
            x.remove(i)
        while y.count(i)>0:
            y.remove(i)
    else:
        print("nada")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...