Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表中减去部分内容?_Python_List_Subtraction - Fatal编程技术网

Python 如何从列表中减去部分内容?

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

我有两张长度相等的单子。一个“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)-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
传入一个值,可以很容易地将函数调整为按其他百分比分割。