적절한 순서로 반복 요소 목록을 인쇄하려면 : 아래는파이썬 스크립트 목록에서 고유 요소를 제거하고 난 단지 반복되는 요소 목록을 목록에서 모든 고유 요소를 제거하고 인쇄하는 스크립트를 작성했습니다
입력 목록 출력 목록
Input list1:
1,2,1,1,3,5,3,4,3,1,6,7,8,5
Output List1:
1,1,1,3,5,3,3,1,5
Input list2:
1,2,1,1,3,3,4,3,1,6,5
Output List2:
1,1,1,3,3,3,1
#! /bin/python
def remove_unique(*n):
dict1={}
list1=[]
for i in range(len(n)):
for j in range(i+1,len(n)):
if n[i] == n[j]:
dict1[j]=n[j]
dict1[i]=n[i]
for x in range(len(n)):
if x in dict1.keys():
list1.append(dict1[x])
return list1
lst1=remove_unique(1,2,1,1,3,5,3,4,3,1,6,7,8,5)
for n in lst1:
print(n, end=" ")
어떻게해야 몇 가지 예 스크립트 위의 작동 정확히 몇 작은 목록에서 테스트 할 때 예상대로. 그러나 나는 스크립트 더 큰 길이의 입력 목록에 대한 (고려 시간과 공간의 복잡성)을 최적화하는 방법에 대한 몇 가지 아이디어가 원하는 (50000 < = LEN (목록) < = 50M) 스크립트가 문제의 번호를 가지고
Jean-François는이 문제에 대한 효율적인 해결책을 제시했지만 나중에 참조 할 경우 dict1에서 x가 dict1.keys()에서 x보다 낫습니다. 파이썬 3에서는'.keys()'가 사전에 [View 객체] (https://docs.python.org/3/library/stdtypes.html#dict-views)를 반환하기 때문에 용서할 수 있지만 Python 2 그것은 dict를 스캔하고 키 목록을 만들어야하기 때문에 좋지 않습니다. 그리고'in' 테스트를 수행하기 위해'.keys()'리스트의 선형 스캔을해야합니다. 그리고 'for x in range (len (n)) :'반복문에 대해 _every_ 반복문을 작성하는 것은 매우 비효율적입니다. –