programing

두 개의 목록 결합 및 중복 제거, 원래 목록의 중복 제거 안 함

closeapi 2023. 4. 26. 23:20
반응형

두 개의 목록 결합 및 중복 제거, 원래 목록의 중복 제거 안 함

두 번째 목록에 중복되는 첫 번째 목록이 무시되는 경우 결합해야 하는 두 개의 목록이 있습니다.설명하기가 좀 어렵군요. 코드가 어떻게 생겼는지, 그리고 결과적으로 제가 원하는 것이 무엇인지 예를 들어 보겠습니다.

first_list = [1, 2, 2, 5]

second_list = [2, 5, 7, 9]

# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]

결과에 두 개의 "2" 값이 포함된 첫 번째 목록이 있지만 second_list에도 2와 5 값이 추가된다는 사실은 첫 번째 목록에 추가되지 않습니다.

일반적으로 이러한 경우에는 집합을 사용하지만 first_list에 있는 집합은 이미 있는 중복 값을 제거합니다.그래서 저는 이 원하는 조합을 달성하기 위한 가장 좋은/가장 빠른 방법이 무엇인지 궁금합니다.

감사해요.

첫 번째 목록에 없는 두 번째 목록의 요소를 추가해야 합니다. 다음과 같이 세트가 어떤 요소인지 확인하는 가장 쉬운 방법입니다.

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

in_first = set(first_list)
in_second = set(second_list)

in_second_but_not_in_first = in_second - in_first

result = first_list + list(in_second_but_not_in_first)
print(result)  # Prints [1, 2, 2, 5, 9, 7]

아니면 한 줄기를 선호한다면 8-)

print(first_list + list(set(second_list) - set(first_list)))
resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)

세트를 사용할 수 있습니다.

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

resultList= list(set(first_list) | set(second_list))

print(resultList)
# Results in : resultList = [1,2,5,7,9]
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

print( set( first_list + second_list ) )

numpy를 사용하는 경우 이를 코드 한 줄로 줄일 수 있습니다.

a = [1,2,3,4,5,6,7]
b = [2,4,7,8,9,10,11,12]

sorted(np.unique(a+b))

>>> [1,2,3,4,5,6,7,8,9,10,11,12]

저에게 가장 간단한 것은:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

merged_list = list(set(first_list+second_list))
print(merged_list)

#prints [1, 2, 5, 7, 9]
resulting_list = first_list + [i for i in second_list if i not in first_list]

순서를 보존하는 평균 대소문자 O(m+n) 알고리즘에 대해 리치 힌들과 네드 배첼더의 반응을 결합할 수도 있습니다.

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

fs = set(first_list)
resulting_list = first_list + [x for x in second_list if x not in fs]

assert(resulting_list == [1, 2, 2, 5, 7, 9])

최악의 경우 O(m)의 복잡성을 가지므로 이 코드의 최악의 경우 여전히 O(m*n)입니다.

조리법에 따라:

resulting_list = list (set("union(first_list, second_list)")

사용할 수 있습니다.dict.fromkeys중복 항목이 없는 목록을 반환하는 방법

def mergeTwoListNoDuplicates(list1, list2):
    """
    Merges two lists together without duplicates
    :param list1:
    :param list2:
    :return:
    """
    merged_list = list1 + list2
    merged_list = list(dict.fromkeys(merged_list))
    return merged_list

이것은 도움이 될 수 있습니다.

def union(a,b):
    for e in b:
        if e not in a:
            a.append(e)

결합 함수는 이미 a에 있는 경우 a의 요소를 복제하지 않고 두 번째 목록을 첫 번째 목록으로 병합합니다.집합 유니언 연산자와 유사합니다.이 함수는 b를 변경하지 않습니다.a=[1,2,3] b=[2,3,4]인 경우.결합(a,b) 후 a=[1,2,3,4] 및 b=[2,3,4]

    first_list = [1, 2, 2, 5]
    second_list = [2, 5, 7, 9]

    newList=[]
    for i in first_list:
        newList.append(i)
    for z in second_list:
        if z not in newList:
            newList.append(z)
    newList.sort()
    print newList

[1, 2, 2, 5, 7, 9]

언급URL : https://stackoverflow.com/questions/1319338/combining-two-lists-and-removing-duplicates-without-removing-duplicates-in-orig

반응형