카테고리 없음

6/27,28 코테 일지 (sorting, 중복 제거, 문자열 길이로 sorting)

코테챌린져 2024. 6. 28. 16:02

#2751

python에서 insertion, merge sort 등을 직접 구현하지 않고 sort()와, sorted를 써도 된다. (time complexity 괜찮아보임)

array= [1,2,5,1,3]
print(sorted(array))

array.sort()
print(array)

 

#1181

리스트 내 중복 원소 제거 시 나는 다음과 같은 코드를 짰는데 (제거도 아니고 출력만 안하는 코드)

stack= []
print(new_array[0])
for i in range(len(new_array)):
  if stack and stack[-1] != new_array[i]:
    stack.pop
    print(new_array[i])
  stack.append(new_array[i])
  i=i+1

다음 과 같이 쉽게 가능하다. 

lst = ['ab','bddad','adsf','adbd','ab']
lst = list(set(lst))

 

set은 밑에와 같이 중복을 허용하지 않는 data type임으로 set으로 만들어 중복을 없애고 다시 리스트화 해준다. 

a= {1,2,3,3}
print(a) #{1,2,3}

 

중복이 없어진 정렬된 리스트를 원한다면 항상 set로 만들고 다시 리스트로 만든 후 sorting을 해야한다.

sorted(list(set(array))) #맞음
list(set(sorted(array))) #틀림. sort를 하고 set을 하면 set에서 정렬된 순서가 보장되지 않음.

 

또한, 각 원소의 문자열 길이로 sorting 시 나는 다음과 같은 코드를 짯는데 

s=0
e=0
boolean=0
temp=0
for i in range(51):
  for j in array:
    if len(j) == i :
      new_array.append(j)
      temp=temp+1
      boolean=1
  e= e+temp
  mergeSort(new_array,s,e)
  if boolean == 1 :
    s=s+temp
  boolean=0
  temp=0

다음과 같이 sort(key=len)으로 쉽게 가능하다.

lst.sort()
lst.sort(key=len)