Как вычесть часть списка из себя? - PullRequest
0 голосов
/ 25 мая 2018

У меня есть два списка одинаковой длины.Во-первых, «ids» - это список чисел 1, 2, 3, 5, 6, 8, 8 и т. Д. В другом - список 0 и 1.

Для идентификаторов я могу успешно вычесть 30%список вроде так.

trainingids = list(set(ids)-set(ids[0:int(len(ids)*0.3)]))
testingids = list(set(ids)-set(trainingids))

Это работает.Однако, когда я делаю то же самое для другого списка, case_ids

trainingcase_ids = list(set(case_ids)-set(case_ids[0:int(len(case_ids)*0.3)])) 
testingcase_ids = list(set(case_ids)-set(trainingcase_ids))

trainingcase_ids возвращает пустой список.Что может быть причиной этого?Есть ли лучший способ выполнить то, что я пытаюсь написать здесь?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Как упоминалось в других ответах / комментариях, set преобразует ваш список 0 с и 1 с в {0, 1}.

Я не совсем уверен в том, что вы пытаетесь сделать, поскольку set подразумевает, что вы хотите удалить дубликаты.Если вы этого не хотите, то простой фрагмент, немного отличающийся от того, который у вас есть, должен дать вам то, что вы хотите:

def subtract_last_thirty_percent(list_instance):
    seventy_percent_index = round(len(list_instance) * 0.7)
    return list_instance[:seventy_percent_index]

training_case_ids = subtract_last_thirty_percent(case_ids)

ОБНОВЛЕНИЕ

Так как вы упомянули в комментарии, что выВы хотите разделить список на два раздела: один с первыми 70% и один с последними 30%, вот как вы это сделаете:

def split_at_seventy_percent(list_instance):
    i = round(len(list_instance) * 0.7)
    return list_instance[:i], list_instance[i:]

training_case_ids, testing_case_ids = split_at_seventy_percent(case_ids)
0 голосов
/ 25 мая 2018
trainingcase_ids = list(set(case_ids)-set(case_ids[0:int(len(case_ids)*0.3)]))
                 = list({0,1} - {0,1})
                 = list({})
                 = []

возможно, вы просто хотите удалить последние 30% элементов из списка:

trainingids = ids[int(len(ids)*0.3):]  #remove the first 30%
trainingids = ids[:1-int(len(ids)*0.3)]  #remove the last 30%
...