我有两个相等长度的列表。一,'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返回一个空列表。可能是什么导致了这个?有没有更好的方法来完成我在这里写的东西?
答案 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
正在将您的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)