원소 바꾸는거 반복문 돌리는게 빠름 아니면 슬라이싱으로 한 번에 대입하는게 빠름??
예를 들어
A = [0,1,2,3,4,5]있을 때, 원소 바꾸는거 뭐가 더 빠름?? 물론 A의 원소 개수가6개가 아니라 수백 수천만개 있다고 생각하면
1번
A[ : : 2] = [100]* (len(A)//2)
2번
for i in range(0, len(A), 2):
A[i] = 100
결과는 다
A =[100, 1, 100, 3, 100, 5]
인데 1번 방식도 대입할수있다는 걸 배워서 궁금
아님 더 나은 방법 있음??
슬라이싱이 더 빠르지 반복문은 게속 반복하잔아
ㄳㄳ 슬라이싱이 내부적으로 어케 돌아가는지 몰라서
2번이 더 빠를걸 1번은 쓸데 없이 리스트 먼저 만들어야 되서
의견이 갈리네 지금 구글링하고 있는데 안나옴ㅜㅜ
애초에 1번이 더 빠를거라고 생각한 이유가 뭔데? "[100]* (len(A)//2)" 이부분을 메모리에 로드해야 되는 코스트를 생각해봐바
직접 colab에서 time모듈로 측정해봤는데 1번이 n이 커질수록 더 빠르게나오길래..
tmp = [100]* (len(A)//2) A[ : : 2] = tmp
말씀대로 줄이 하나 더있어서 그런줄알고 1번코드도 다음과같이 2줄로 바꿔봤는데 그래도 1번이 더 빠르더라구요ㅜ
2번이 더 빠름. 할당은 시간복잡도 o(1) 인데 위에거는 슬라이싱하는데 N/2 만큼 일단 들고.. slice하는게 O(N/2) 에다가 [100] * (len(A)//2) 할당하는 메모리도 낭비되고, 마지막으로 A[::2] = [100] * (len(A)//2) 하는데 사실상 2번하고 시간복잡도가 같으니까
시간복잡도만 고려하면 1번 코드가 더 빠르지않음? colab에서 돌려보니깐 동일조건일 때 1번이 2번이랑 유의미하게 차이나는데..