如何从列表中减去部分列表?

时间:2018-05-25 14:40:51

标签: python list subtraction

我有两个相等长度的列表。一,'ids'是一个数字1,2,3,5,6,8等列表。另一个是0和1的列表。

对于ids,我可以成功地减去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 :(得分:0)

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%

答案 1 :(得分:0)

正如其他答案/评论中所述,set正在将您的01列表转换为{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)