LostCatBox

python 함수, 자료형, 그외

Word count: 938Reading time: 5 min
2020/11/04 101 Share

표기방법:

  • < >안에있는 것들은 반드시 들어가야하는 요소

  • [ ]안에 있는 것들은 옵션

함수

zip

길이가 같은 자료형을 묶어주는 역할을 하는함수

1
2
3
4
5
6
Number = [1,2,3,4]
Name = ['hong','gil','dong','nim']
Number_Name = list(zip(Number,name))
print(Number_Name)

>>>[(1 ,'hong'), (2 ,'gil'), (3 ,'dong'), (4 ,'nim')]

map

map은 반복가능한 객체의 요소를 지정된 함수로 처리해주는 함수입니다.

iterable하면 수행가능

  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))
1
2
3
4
5
6
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
a[i] = int(a[i])

>>>a
[1, 2, 3, 4]

각 요소에 적용할 함수를 적용할수있다

1
2
3
4
5
a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a))

>>>a
[1, 2, 3, 4]

+ input().split() 과 map으로 활용해보자

1
2
3
4
a=input().split() #split을 적용하면 리턴값은 리스트, 입력은 10 20 으로했다고 가정

>>>a
["10", "20"]

map을 활용하면 간단히 정수로 반환가능하다

1
2
3
4
5
6
7
8
9
10
a = map(int, input().split()) #10 20 입력


>>>a
<map object at 0x03DFB0D0> #map 객체가 만들어졌다 (맵 객체역시 iterable객체이다)
>>>list(a)
[10, 20] #리스트로 출력

>>>print(list(map(int, "1 2 3".split())))
[1,2,3]

또한 맵 객체는 unpack을 지원한다

1
b,c = a  #b,c에 각각 10, 20이 들어간다

filter()

  • filter(function, iterable)

list 나 dictionary 같은 iterable 한 데이터를 특정 조건에 일치하는 값만 추출해 낼때 사용하는 함수이다.

filter에 인자로 사용되는 function은 처리되는 각각의 요소에 대해 Boolean 값을 반환합니다. True를 반환하면 그 요소는 남게 되고, False 를 반환하면 그 요소는 제거 됩니다.

1
2
3
4
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
list(filter(lambda x: x % 3 == 0, foo))

[18, 9, 24, 12, 27]

sys.stdin.readline()

자세히

input()과의 차이점들을 정리하고, 다음 알고리즘 문제 풀때 시간을 줄일수있을것이라고 판단된다

input()은 사용자의 입력을 받고문자열로 변환추가 strip 진행의 과정을 거친다. (strip은 추가 개행(/n)에 대해서 일어난다)

sys.stdin.readline()은 사용자의 입력을 받지만 개행 문자도 입력을 받을 수 있다.(\n도 포함된다)

input()과 가장 큰 차이점은 input()내장 함수s로 취급되는 반면 sys 에 속하는 메소드들은 file object로 취급된다. 즉, 사용자의 입력만을 받는 buffer를 하나 만들어 그 buffer에서 읽어들이는 것이다.

input()은 더 이상 입력이 없는데도 수행될 경우EOFerror를 뱉어내는 반면 sys.stdin.readline()은 빈 문자열을 반환한다.

다음 예시를 해석해보자

(알고리즘문제에서 이것때문에 입력을 못받았다)

다음과 같이 입력되는 알고리즘 문제였다

1
2
3
4
5
2
6 3
1 2 3 1 2 3
6 2
1 2 3 1 2 3

풀이중 입력 다루는 코드

1
2
3
4
5
6
import sys

case = int(sys.stdin.readline())
for i in range(case):
n, l = map(int, sys.stdin.readline().split()) # n=대여일 수, l=공연팀 수
borlist = list(map(int, sys.stdin.readline().split())) # 대여비용 입력받음

sys.stdin.readline() 하면 2 /n까지 모두 가져가지만 int()로 둘려쌓여있으니… case=2 였다.

sorted()

정렬할때 많이 쓰는것 sort와 차이보기

<list>.sort()를 하면 list객체 자체가 바껴버림(원본손실)

sorted()는 이와다르게 key를 기준으로 하여 정렬하고 반환합니다

  • sorted(<iterable>, key=lambda x:len(x))

    key로 함수를 후크, reverse=True를 넣어줄경우 내림차순 정렬

reversed()

<list>.reverse()를 하면 list객체 자체가 바껴버림(원본손실)

reversed()는 이와다르게 순서가 거꾸로 뒤집힌 리스트를 반환합니다

  • list(reversed(<list>))

replace()

특정 문자열 변경 및 제거시 사용

  • replace(old, new, [count]) -> replace(“찾을값”, “바꿀값”, [바꿀횟수])

문법

root()

1
2
# root 쓰기
2**0.5

lambda

자세히

함수 자체를 임시적으로 간단하게 만들수있다

  • lambda 인수들:표현식(로직)

람다 정의에는 return 문이 포함되어있지 않다.

lambda 함수를 어떤 변수에 할당할 필요조차 없습니다. 즉각적으로 사용할 수 있고 더 이상 필요하지 않을 때 잊어 버릴 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> def inc(n):
return lambda x: x + n

>>> f = inc(2)
>>> g = inc(4)
>>> print(f(12))
14

>>> print(g(12))
16

>>> print(inc(2)(12))
14

list comprehension

자세히

  • 단일 for문

    1
    [i*2 for i in list1]
  • 이중 for문

    1
    [i*j for j in list1 for i in list1]
  • if 문 (else없다면) 뒤에적기

    1
    [i*j for j in list1  for i in list1 if i> 1]
  • if 문 (else존재) 앞에적기

    1
    [i*j if i> 1 else 0 for j in list1 for i in list1]

자료형 특성

Set

중복불가 셋은 순서가 없는 자료형이다.

즉, az, 1 이런식으로 나타난다.

index가없으므로 slice를 사용할수없다.

set을 사용한다고 해서 자동으로 오름차순으로 정렬되지 않습니다. Python의 set은 BBST가 아니라 HashSet의 형태

사용시

1
2
3
s = {} #이것은 자동 dict 자료형으로 생성된다. set 아님
s = {1,2,3} #이것은 set 자료형이다
s = set() #이것도 가능하다

List

join

List를 특정 구분자를 포함해 문자열으로 반환

  • "<구분자>".join(<list>)

pop

주의할점은 out of range 뜰수있다. list바뀌므로

remove와 비교하자

remove()에 인자를 주면 일치하는 가장 첫번째 인자를 리스트에서 제거한다

  • pop() 은 맨뒤에 인자를 제거하며 반환한다
  • pop([index]) 인덱스를 넣으면 해당 인덱스의 리스트 요소를 반환하며 제거한다

slice

자주사용되는 slice 특징을 알면 훨씬 활용도 높다

  • list[x:y]인데 x나 y가 빈값이면 각자 맨 마지막, 맨처음까지돈다.
  • list[x]는 해당 인덱스에 값없으면 오류를 반환하지만__ list[x:x]는 빈 리스트반환__
  • a[-1:] 같은 경우는 리스트가 비어있다면 빈값, 아니라면 최신값 하나를 가져온다.

String

split

문자열을 특정 “구분자”를 기준으로 리스트로 반환

  • <리스트>.split(“<구분자>”)

upper <>lower

upper는 문자열을 대문자로

lower는 문자열을 소문자로

  • <문자열>.upper()
  • <문자열>.lower()

Dict

1
2
3
4
names={"rhdiddl":10010, "rhdiddl2":10202, "rhdiddl3":9999}

# dict- value 기준으로 내림차순
sorted(names.items(), key=lambda x:x[1], reverse=True)
CATALOG
  1. 1. 함수
  2. 2. 문법
  3. 3. 자료형 특성