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_Partitioning - Fatal编程技术网

Python 从一个列表中删除另一个列表中的元素,但不完全删除该值

Python 从一个列表中删除另一个列表中的元素,但不完全删除该值,python,list,partitioning,Python,List,Partitioning,我有一个项目,其中我必须根据参数listA的长度划分2个列表,数字必须按升序排列,其余元素进入列表B def partitionLists(listA, listB, largerFirst=False): if largerFirst == False: sortedA = [] listCombination = listA + listB listCombination.sort() for i in range(len(listA)): i

我有一个项目,其中我必须根据参数listA的长度划分2个列表,数字必须按升序排列,其余元素进入列表B

def partitionLists(listA, listB, largerFirst=False):
if largerFirst == False:
    sortedA = []
    listCombination = listA + listB
    listCombination.sort()
    for i in range(len(listA)):
        if listCombination[i] <= listCombination[i + 1]:
            sortedA.append(listCombination[i])
def分区列表(listA、listB、largerFirst=False): 如果largerFirst==False: sortedA=[] listCombination=listA+listB listCombination.sort() 对于范围内的i(len(listA)):
如果listCombination[i]您可以使用第一个列表上的迭代器来执行此操作,该迭代器将告诉您要跳过第二个列表中的哪些元素(假设两个列表都已排序):

输出:

a = [1, 1, 3, 3, 4, 4, 5, 5]
b = [1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
c = removeList(a,b)

print(c) 

# [5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
[编辑]如果列表A中可能存在列表B中不存在的数字,则需要调整方法以跳过这些值:

def removeList(listA,listB):
    iterA  = iter(listA)
    valueA = next(iterA,None)
    result = []
    for valueB in listB:
        while valueA is not None and valueA < valueB:
            valueA = next(iterA,None) # skip values in listA that are not in listB
        if valueB == valueA:
            valueA = next(iterA,None)
        else:
            result.append(valueB)
    return result

a = [1, 1, 3, 3, 4, 4, 4, 5, 5, 8]
b = [1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
c = removeList(a,b)

print(c)

# [5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
def removeList(列表A、列表B): iterA=国际热核实验堆(listA) valueA=下一个(iterA,无) 结果=[] 对于列表B中的值B: 当valueA不是None且valueA在您提供的示例中,似乎最好在较大的列表中循环查看这些元素是否在较小的列表中。如果没有,您可以将它们附加到空列表中。根据你的问题,我不确定哪个列表需要排序,但你可以在之前或之后对列表进行排序。它不应该改变您将元素附加到空列表中的能力。

传统重复问题中的方法只会删除5个问题中的2个,这似乎正是您想要的。您如何删除元素?变量和函数名称应遵循带有下划线的
小写形式。是的,ty工作得很好,以前从未使用过迭代器,它肯定会研究这一点,谢谢你是的,那也行我想我太有远见了,对较小的列表进行排序,检查它们的索引是否相等,如果相等就删除它们
def removeList(listA,listB):
    iterA  = iter(listA)
    valueA = next(iterA,None)
    result = []
    for valueB in listB:
        while valueA is not None and valueA < valueB:
            valueA = next(iterA,None) # skip values in listA that are not in listB
        if valueB == valueA:
            valueA = next(iterA,None)
        else:
            result.append(valueB)
    return result

a = [1, 1, 3, 3, 4, 4, 4, 5, 5, 8]
b = [1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
c = removeList(a,b)

print(c)

# [5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]