2022-09-07 TIL sparta

최해민·2022년 9월 7일
0

Python 활용

자주 사용되는 모듈 및 패턴

1) random

random 모듈은 랜덤한 로직이 필요할 때 사용된다.

  • random.shuffle(반복가능한 자료형)

# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용된다.
import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]

random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4

여기서 random.shuffle()은 return이 없어서 None을 반환한다. 나는 변수를 재선언하려 했는데, None이 찍혀서 당황했다.

    def shuffle(self, x, random=None):
        """Shuffle list x in place, and return None.

        Optional argument random is a 0-argument function returning a
        random float in [0.0, 1.0); if it is the default None, the
        standard random.random will be used.

        """

        if random is None:
            randbelow = self._randbelow
            for i in reversed(range(1, len(x))):
                # pick an element in x[:i+1] with which to exchange x[i]
                j = randbelow(i + 1)
                x[i], x[j] = x[j], x[i]
        else:
            _warn('The *random* parameter to shuffle() has been deprecated\n'
                  'since Python 3.9 and will be removed in a subsequent '
                  'version.',
                  DeprecationWarning, 2)
            floor = _floor
            for i in reversed(range(1, len(x))):
                # pick an element in x[:i+1] with which to exchange x[i]
                j = floor(random() * (i + 1))
                x[i], x[j] = x[j], x[i]

내가 원했던 것을 구현하려면 random.sample(x,k=len(x))를 사용했어야 한다.

To shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x)) instead.
--> 변경할 수 없는 시퀀스를 섞고 새 섞은 목록을 반환하려면 대신 sample(x, k=len(x))를 사용하십시오.

random.shuffle()이 이미 있는 반복가능한 자료형을 섞어주므로 변수를 재선언할 필요가 없다.
주의하자.

  • random.randrange()

    randrange()는 range()의 패턴과 동일하다.
    randrange(10)은 0~9까지의 숫자중 하나를 무작위로 반환해준다.
    randint()와 차이점은 인수에 들어가는 숫자를 포함하지 않는다는 것이다.

  • random.randint()

    randint()는 0부터 인수의 숫자의 범위중 하나를 무작위로 반환해준다.
    randrange()와 차이점은 인수에 들어가는 숫자를 포함 한다는 것이다.

2) datetime

datetime 모듈은 날짜를 다룰때 사용하는 모듈이다.

from datetime import datetime, timedelta

# 현재 날짜 및 시간 출력
print(datetime.now()) # 2022-09-04 03:55:32.277095

# datetime의 format code
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ...  30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''

# string을 datetime 날짜로 변경하기
string_datetime = "22/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2022-12-25 13:20:00

# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04

# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2022-09-01 04:07:48.526502
  • timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
    시각의 차이를 계산해주는 함수.
    만약, days=3이면 3일의 datetime.timedelta객체를 반환해주며 이를 이용해 datetime연산이 가능하다.
    알고리즘 문제에서 봤던 기억이 있다 기억해두자!
profile
안녕하세요

0개의 댓글