[파이썬을 파이썬답게] 기타

pengu·2021년 3월 16일
0

📙 for문과 if문을 한번에

문제 설명
정수를 담은 리스트 mylist를 입력받아, 이 리스트의 원소 중 짝수인 값만을 제곱해 담은 새 리스트를 리턴하는 solution함수를 완성해주세요.

제한 조건

  • mylist는 길이가 100이하인 배열입니다.
  • mylist의 원소는 1이상 100 이하인 정수입니다.

입출력 예

mylistoutput
[3, 2, 6, 7][4, 36]
- 3은 홀수이므로 무시합니다.
- 2는 짝수이므로 제곱합니다.
- 6은 짝수이므로 제곱합니다.
- 7은 홀수이므로 무시합니다.
따라서 2의 제곱과 6의 제곱을 담은 리스트인 [4, 36]을 리턴해야합니다.

🔔 내 풀이

mylist = [3, 2, 6, 7]
return [x**2 for x in mylist if x % 2 == 0]

🔔 강의 Tip

파이썬의 list comprehension을 사용하여 한 줄 안에 for문과 if문을 처리할 수 있다.



📙 flag OR else

문제 설명
본 문제에서는 자연수 5개가 주어집니다.

  • 숫자를 차례로 곱해 나온 수가 제곱수1가 되면 found를 출력하고
  • 모든 수를 곱해도 제곱수가 나오지 않았다면 not found를 출력하는
    코드를 작성해주세요.

입출력 예

inputoutput
2 4 2 5 1found
5 1 2 3 1not found
예 1) 
- 수를 곱해나가면 2, 8, 16, 80, 80 이 나옵니다. 
- 16은 4를 제곱해 나온 수이므로 이 수는 제곱수입니다. 
- 따라서 found를 출력합니다.

예 2) 
- 수를 곱해나가면 5, 5, 10, 30, 30 이 나옵니다. 
- 이 중 어떤 수도 제곱 수가 아니므로 not found를 출력합니다.

🔔 내 풀이

numbers = [2, 4, 2, 5, 1]
num = 1
found = False
for n in numbers:
    num *= n
    if int(num**0.5)**2 == num:
        print("found")
        found = True
        break
        
if not found:
    print("not found")

🔔 강의 Tip

파이썬의 for-else문을 사용하여 코드를 줄일 수 있다.

numbers = [2, 4, 2, 5, 1]
num = 1
for n in numbers:
    num *= n
    if int(num**0.5)**2 == num:
        print("found")
        found = True
        break
        
else:
    print("not found")



📙 두 변수의 값 바꾸기 - swap

🔔 강의 Tip

파이썬에서는 값을 임시로 저장할 temp변수를 선언하지 않고도 두 값을 바꿀 수 있다.

  a = 3
  b = 'abc'
  
  a, b = b, a



🔔 강의 Tip

파이썬의 bisect.bisect 메소드를 사용하면 이진 탐색을 쉽게 수행할 수 있다.

  import bisect
  mylist = [1, 2, 3, 7, 9, 11, 33]
  print(bisect.bisect(mylist, 7))
  
  #결과
  4

이진 탐색(Binary Search)
오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘으로 탐색 속도가 매우 빠름

def bisect(a, x, lo=0, hi=None):
    if lo < 0:
        raise ValueError('lo must be non-negative')
    if hi is None:
        hi = len(a)
    while lo < hi:
        mid = (lo + hi) // 2
        if a[mid] < x:
            lo = mid + 1
        else:
            hi = mid
    return lo

mylist = [1, 2, 3, 7, 9, 11, 33]
print(bisect(mylist, 7))



📙 클래스 인스턴스 출력하기 - class의 자동 string casting

🔔 강의 Tip

파이썬에서는 print문 안에서 format을 지정하는 방법 외에도, 클래스 내부에 __str__메소드를 정의하여 출력 format을 지정할 수 있다.

  class Coord(object):
    def __init__ (self, x, y):
        self.x, self.y = x, y
    def __str__ (self):
        return '({}, {})'.format(self.x, self.y)

  point = Coord(1, 2)
  print(point) # == print( '({}, {})'.format(coord.x, coord.y) )



📙 가장 큰 수, inf

🔔 강의 Tip

파이썬에서는 inf를 활용하여 가장 큰 값을 할당할 수 있다.
inf는 어떤 숫자와 비교해도 무조건 크다고 판정되고, 음수 기호를 붙이는 것도 가능하다.

  min_val = float('inf')
  min_val = float('-inf')



📙 파일 입출력 간단하게 하기

🔔 강의 Tip

파이썬에서는 with - as구문을 활용하여 파일 입출력을 간결하게 할 수 있다.

  • 파일을 close 하지 않아도 됨: with - as 블록이 종료되면 파일이 자동으로 close 됨

  • readlines가 EOF까지만 읽으므로, while 문 안에서 EOF를 체크할 필요가 없음

    with - as구문은 파일 뿐만 아니라 socket이나 http 등에서도 사용할 수 있음

    with open('myfile.txt') as file:
        for line in file.readlines():
            print(line.strip().split('\t'))

Programmers - 파이썬을 파이썬답게 https://programmers.co.kr/learn/courses/4008

profile
꾸준하게

0개의 댓글