Python 如何从列表中减去部分内容?
我有两张长度相等的单子。一个“id”是数字1、2、3、5、6、8等的列表,另一个是0和1的列表 对于ID,我可以成功地减去列表的30%,就像这样Python 如何从列表中减去部分内容?,python,list,subtraction,Python,List,Subtraction,我有两张长度相等的单子。一个“id”是数字1、2、3、5、6、8等的列表,另一个是0和1的列表 对于ID,我可以成功地减去列表的30%,就像这样 trainingids = list(set(ids)-set(ids[0:int(len(ids)*0.3)])) testingids = list(set(ids)-set(trainingids)) 这很有效。但是,当我对另一个列表执行相同的操作时,case_id trainingcase_ids = list(set(case_ids)-s
trainingids = list(set(ids)-set(ids[0:int(len(ids)*0.3)]))
testingids = list(set(ids)-set(trainingids))
这很有效。但是,当我对另一个列表执行相同的操作时,case_id
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_id返回一个空列表。这可能是什么原因造成的?有没有更好的方法来完成我想写的东西
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%
如其他回答/评论中所述,
集合
正在将0
s和1
s列表转换为{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)
你到底想干什么?减30%是什么意思?是否要删除某些元素?否则,请查看您的问题描述和代码:{0,1}-{0,1}={},因此获取空列表似乎是合乎逻辑的。我使用了set参数,因为它适用于上一个列表。我是一个非常新的,技术非常差的程序员。我现在明白为什么set不工作了。我想做的是通过从列表中删除30%的元素来缩短列表的长度。只是一句备注。在这里,您假设他想删除前30%,而他的代码建议他要删除最后30%,这是我提出的解决方案。我不知道set会删除重复项,这不是我想做的。我试图将ID和case_ID分别分为两部分。一部分包含70%的元素,另一部分包含其余元素。谢谢@akasolace我调整了这个。看起来有很多类似的解决方案。@newtoth谢谢您提供更多信息。我在这个答案中添加了一个新的解决方案,给你一个70%的块和一个30%的块。还要注意的是,通过为硬编码的
0.7
传入一个值,可以很容易地将函数调整为按其他百分比分割。