def solution(arr):
i = 0
while i < len(arr):
try:
if arr[i] == arr[i+1]: # "요소 제거는" 효율성 문제가 존재... 1. 인덱스를 활용하여 요소 추가하는 방식을 추천
arr.pop(i) # "제거보단 추가"
i += 0 # 요소 값을 삭제했기 때문에 인덱스 유지
else:
i += 1
except IndexError: # 변화식 입력하지 않으면 무한 루프된다.
i += 1
answer = arr
return answer
문제점
pop()
혹은 remove()
로 해당 요소를 삭제하는 방식의 코딩 ➡ 효율성이 떨어지는 코드가 될 가능성이 높음 def solution(arr):
answer = []
for i in range(len(arr)):
if i == 0: # i가 0일 때는, 비교할 값이 없으므로 반드시 값을 추가해야 한다.
answer.append(arr[i]) # 기존 리스트에서 중복되는 값을 제거하는 대신,
# 새롭게 생성한 리스트 객체 answer에 중복되지 않게 값을 추가하도록 하였다.
elif arr[i] != arr[i-1]:
answer.append(arr[i])
elif arr[i] == arr[i-1]:
continue
return answer
print(solution([4,4,4,3,3])) # 결괏값: [4, 3]
해결 방법
append()
)하는 방식을 선택했다. def solution(nums):
answer = 0 # 중복되는 요소를 제외할 때는 append()를 사용하는 것이 효율적이라는 사실을 다시 한번 확인
x = []
for i in range(len(nums)):
if i == 0:
x.append(nums[i])
answer += 1
elif nums[i] in x: # 리스트 x에 이미 존재하는 요소는 추가하지 않고 다음 loof로 이동
continue
else:
if answer < len(nums) // 2: # 리스트 x의 길이는 nums 객체 길이의 절반으로 제한되므로,
# 이를 초과하지 않는 범위 내에서 값을 추가한다.
x.append(nums[i])
answer += 1
else:
continue
return answer, x
print(solution([3,3,3,2,2,4])) # 결괏값: (3, [3, 2, 4])
리스트 안의 중복 요소를 제거할 땐 pop()
, remove()
을 활용하기보단 append()
로 중복되지 않은 값을 채워 넣는 방법이 효율적일 수 있다.
리스트 객체를 역순으로 반환하려면 -1부터 시작하는 음수 인덱스를 사용하면 된다(번외)
sort()
: 요소를 오름차순으로 정렬(번외)
문자열 오름차순
대문자 < 소문자
a < b
sorted()
의 다중 조건 설정(번외)
sorted(정렬할 객체, key = lambda x: (첫 번째 조건, 두 번째 조건))
a = ['apple', 'egg', 'milk', 'cowl', 'socks']
print(sorted(a, key=lambda x : (x[1], x[2]))) # 결괏값: ['egg', 'milk', 'socks', 'cowl', 'apple']
람다 표현식으로 함수 만들기(번외)
람다 표현식을 활용하면 익명 함수를 만들 수 있다.
람다 표현식으로 만든 함수를 호출하려면, 람다 표현식을 변수에 할당해주면 된다.
람다 표현식은 map()
, filter()
, reduce()
의 인수로 함수를 받고자 할 때 사용된다.
list comprehension으로 처리가 가능한 경우엔 map()
, filter()
를 람다 표현식과 함께 사용하기보단, 리스트 표현식을 사용하는 것이 가독성 및 속도 측면에서 좋은 선택이다.
# 람다 표현식을 변수에 할당하여 호출하기
a = lambda x, y : x + y
print(a(10, 5)) # 결괏값: 15
# 람다 표현식을 함수의 인수로 사용하기
a = [1, 3, 5, 6, 7, 8, 9]
x = filter(lambda x : x > 5, a)
print([v for v in x ]) # 결괏값: [6, 7, 8, 9]
y = [x for x in a if x > 5] # list comprehension으로 lambda 표현식 없이 조건 처리가 가능하다.
print(y) # 결괏값: [6, 7, 8, 9]