두 개의 목록 결합 및 중복 제거, 원래 목록의 중복 제거 안 함
두 번째 목록에 중복되는 첫 번째 목록이 무시되는 경우 결합해야 하는 두 개의 목록이 있습니다.설명하기가 좀 어렵군요. 코드가 어떻게 생겼는지, 그리고 결과적으로 제가 원하는 것이 무엇인지 예를 들어 보겠습니다.
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
'programing' 카테고리의 다른 글
UI 보기의 맨 위에 테두리를 추가하는 방법 (0) | 2023.04.26 |
---|---|
SQL Server에서 "Null" 값의 크기 (0) | 2023.04.26 |
기본값 대응:다음 키보드 버튼을 누른 후 다음 텍스트 입력을 선택하는 방법은 무엇입니까? (0) | 2023.04.26 |
Bash에서는 대괄호[ ]가 대괄호[ ]보다 좋습니까? (0) | 2023.04.21 |
ThreadPool 사용.ASP의 QueueUserWorkItem.고트래픽 시나리오에서의 NET (0) | 2023.04.21 |