2017-12-30 49 views
-1
n,m=map(int,input().split()) 
arr=[i%m for i in (map(int,(input().split())))] 

가정하자 n=5m =3 등 입력 array =[3, 2 ,1 ,4, 5]arr=[0, 2, 1, 1, 2]하지만 지금은 효율적으로 [1,1][2,2] 뭐야이 그룹에 가장 좋은 방법, 즉 목록에 동등한 가치의 요소를 저장할 ? 그들을 함께 효율적으로 또한 나는 끝의 인덱스를 원하는 정도로그룹화 같은이 경우 목록의 요소를 효율적으로

출력 [[1,1], [2,2] 인덱스 (2,3) 및 인덱스에서 (1,4)

내가 뭘 찾고 원래 배열 요소의 색인 mod tha를 복용하기 전에입니다 mod 연산을 수행 한 후 동일한 값을가집니다.

+0

아니, 그것은 O (N) 이하에서 수행 할 수 없습니다 절약 할 수 있습니다. 그룹화하려면 모든 요소를 ​​한 번 반복해야합니다. –

+0

그러면 예상되는 출력은 무엇입니까? –

+0

그래서 '0'은 고유하기 때문에 포함되지 않습니까? '[1, 2, 1, 1, 2] '의 입력리스트는 무엇이 될까요? –

답변

3

set에만 고유 한 값

arr=[0, 2, 1, 1, 2] 
arr = [(s, arr.count(s)) for s in set(arr)] 
# [(0, 1), (1, 2), (2, 2)] 

업데이트 (@JonClements 덕분에)

s = {} 
for i, v in enumerate(arr): 
    s.setdefault(v % 3, []).append(i) 
print(s) 
# {0: [0], 1: [2, 3], 2: [1, 4]} 
+0

그게 너무 카운터를 사용하여 할 수 있었다 카운터 (arr)하지만 그 인덱스를 보존하지 않습니다. 나는 내가 질문에서 분명하게하지 않았지만 지금 나는 질문을 편집했다고 생각한다. 내 사과. – Demonking28

+0

https://eval.in/928370 – splash58

+0

try/except - 대신에's.setdefault (v, [])를 사용하십시오. append (i)' –