Удаление объектов от одного набора в другом наборе

Я думаю, что ваша проблема в том, что вы не изменяете данные, как только условие выполнено. Что-то вроде приведенного ниже кода должно помочь решить вашу проблему:

import numpy as np
def dataLoad(filename):
    data=np.loadtxt(filename)
    retdata = []
    for row in data:
        if (row[0] < 10) or (row[0] > 60):
            print("Temperature is out of range")
            continue
        elif (row[1]<0):
            print("Growth rate is negative")
            continue
        elif (row[2]!=1) or (row[2]!=2) or (row[2]!=3) or (row[2]!=4):
            print("Bacteria is not 1, 2, 3 or 4")
            continue
    retdata.append(row)
    return retdata

Надеюсь, что поможет.

5
задан Joel Coehoorn 9 June 2009 в 20:45
поделиться

6 ответов

Я обнаружил, что лямбда-выражения были идеальной парой. Вместо длинного linq к методу объектов я мог сделать это во всего нескольких строках с лямбдой:

foreach(TypeA objectA in listA){
    listB.RemoveAll(objectB => objectB.Id == objectA.Id);
}
3
ответ дан 18 December 2019 в 10:50
поделиться

Вот две опции. Не уверенный, какой быстрее.

listB.RemoveAll(listA.Contains);


foreach (string str in listA.Intersect(listB))
  listB.Remove(str);
12
ответ дан 18 December 2019 в 10:50
поделиться

простой цикл:

for (item i: LISTA) {
    removeItem(i, LISTB);
}


method removeItem(Item, List) {
    for (Item i: List) {
        if (Item == i)
            List.removeItem(i);
    }
}
0
ответ дан 18 December 2019 в 10:50
поделиться

Я думаю, что лучший подходящий метод является Микрорабом

Большинство примеров выше для ситуаций, которые два списка являются тем же типом. Но если Вы хотите выдержать сравнение, идентификатор различных типов и хотеть удалить themn лучший способ является путем Микрораба.

Спасибо

1
ответ дан 18 December 2019 в 10:50
поделиться

Я не знаю, что это - наилучший вариант, но если Вы удаляете все элементы Листы, которые находятся в ListB, просто выполняющем итерации по Листе и использующем, если ListB.contains создают, удаляя его из ListB.

Что-то вроде этого

foreach Object o in ListA
  If ListB.contains(o)
    ListB.remove(o)
0
ответ дан 18 December 2019 в 10:50
поделиться

Что-то для ссылки, которая доступна с Библиотекой Универсального набора C5 для.NET, RemoveAll метод, столь же указанный Todd White прежде. Однако C5 также предлагает другой метод в своих интерфейсах, RetainAll который делает функциональную противоположность RemoveAll в этом, с помощью списков исходного автора,

ListB.RetainAll(ListA) набор { Item1, Item2 }, тогда как ListB.RemoveAll(ListA) набор { Item3, Item4 }.

0
ответ дан 18 December 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: