如何从自身中减去列表的一部分?
How to subtract part of a list from itself?
我有两个等长的列表。一个,'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))
训练case_ids returns 一个空列表。是什么原因造成的?有没有更好的方法来完成我在这里写的东西?
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%
如其他 answers/comments 中所述,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)
我有两个等长的列表。一个,'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))
训练case_ids returns 一个空列表。是什么原因造成的?有没有更好的方法来完成我在这里写的东西?
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%
如其他 answers/comments 中所述,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)