본문 바로가기
Python/파이썬 기초

시퀀스형 자료형과 관련된 내장함수 - 파이썬 기초(12)

by 콩돌 2018. 12. 17.
반응형

참고 자료

https://docs.python.org/3/library/functions.html


파이썬 버전 3.7 기준



시퀀스형 자료형(리스트, 튜플 등)과 관련된 내장함수


본 포스팅에서 다루는 함수는 다음과 같다.
len(), zip(), enumerate(), map(), all(), any(), filter(), slice(), sorted(), reversed() 등.

시퀀스형 자료형으로 변경해주는 내장함수(list(), set(), tuple(), frozenset(), range()) 등에 대한 내용은 여기를 참고한다.


※ 이터레이블(iterable)?

  ○ 먼저 쉽게 설명하면 리스트와 튜플과 같은 시퀀스형 자료형 대부분은 이터레이블하다.

  ○ 이터레이블에 대한 자세한 설명은 여기를 참고한다.


시퀀스형 자료형의 요소수를 반환하는 내장함수


len(s)

  ○ 객체의 길이 혹은 항목의 수를 반환한다.

  ○ 입력 인자로는 시퀀스형과 같은 자료형이 들어갈 수 있다.


사용 예)

In[79]: len([1,2,3,4,5,6])

Out[79]: 6

In[80]: len(set([1,2,2,3,4,4,3,5,6]))

Out[80]: 6



시퀀스형 자료형을 가공하는 내장함수


zip(*iterables)

  ○ iterables의 요소들을 모으는 이터레이터를 만든다. 

  ○ 같은 인덱스를 가지는 요소들끼리 모으며, 모여진 요소들은 하나의 튜플로 묶인다.

     ▷ 입력된 iterables들 중 가장 짧은 iterables의 길이에 맞춰 요소를 모은다.


사용 예)

In[11]: a=[1,2,3,4,5,6,7,8,9,10]

In[12]: b=['a','b','c','d','e','f','g','h','j','k']

In[13]: c=[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

In[14]: list(zip(a,b,c))

Out[14]: 

[(1, 'a', 1.0),

 (2, 'b', 2.0),

 (3, 'c', 3.0),

 (4, 'd', 4.0),

 (5, 'e', 5.0),

 (6, 'f', 6.0),

 (7, 'g', 7.0),

 (8, 'h', 8.0),

 (9, 'j', 9.0),]


enumerate(iterable, start=0)

  ○ 열거 객체를 반환한다. 

  ○ 입력되는 인자는 이터레이터 혹은 이터레이션을 지원하는 객체이어야 한다.

    ▷ 시퀀스형에서 대표적으로, 리스트 튜플, 딕셔너리 등이 있으며, 집합과 같은 객체는 입력해도 되지 않는다.

  ○ 열거 객체를 출력해준다는 특징으로 주로 for 문에서 많이 쓰인다.


사용 예)

In[21]: a=['good', 'batter', 'best']

In[22]: b= list(enumerate(a))

In[23]: b

Out[23]: [(0, 'good'), (1, 'batter'), (2, 'best')]


In[24]: for i, obj in enumerate(a):

     ...:    print(i,obj)

     ...:    

0 good

1 batter

2 best


map(function, iterable, ...)

  ○ iterable의 모든 항목에 function을 적용한 후 그 결과를 반환하여 이터레이터를 작성한다.

  ○ 입력되는 iterable의 개수는 function에 입력되는 변수의 수에 의존한다.

     ▷ 각 iterable의 요소 수가 다른 경우는 작은 쪽을 따라간다.


사용 예)

In[20]: a=[1,2,3,4,5,6,7,8,9,10]

In[21]: def func1(iter):

     ...:      return iter/2

     ...:

In[22]: list(map(func1, a))

Out[22]: [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]

In[23]: c=[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

In[24]: def func2(iter1, iter2):

     ...:      return iter1/2+iter2/3

     ...:

In[25]: list(map(func2,a,c))

Out[25]: 

[0.8333333333333333,

 1.6666666666666665,

 2.5,

 3.333333333333333,

 4.166666666666667,

 5.0,

 5.833333333333334,

 6.666666666666666,

 7.5]




요소 검사를 수행하는 내장함수


all(iterable)

  ○ 입력된 iterable의 모든 요소가 참인 경우나 iterable이 비어있는 경우 True를 반환한다. 

  ○ 이외에는 False을 반환한다.

    ▷ 아래 예에서 all(c)가 False인데 그 이유는 []가 False을 가지기 때문이다. 이와 관련된 내용은 여기를 참고한다.


사용 예)

In[91]: a = [1,1.0,'a',True]

In[92]: b=[]

In[93]: c= [1,1.0,'a',True, []]

In[94]: all(a)

Out[94]: True

In[95]: all(b)

Out[95]: True

In[96]: all(c)

Out[96]: False


any(iterable)

  ○ 입력된 iterable의 요소중 하나라도 참이면 True를 반환하고, 이외의 경우에 대해선 False을 반환한다.

  ○ iterable이 비어있는 경우 False를 반환한다.


사용 예)

In[97]: a = [False,[],True]

In[98]: b=[]

In[99]: c=[[],False,0]

In[100]: any(a)

Out[100]: True

In[101]: any(b)

Out[101]: False

In[102]: any(c)

Out[102]: False


filter(function, iterable)

  ○ function이 True를 반환하는 iterable의 요소들로 이터레이터를 구축한다.

  ○ function값이 None인 경우 iterable중 True값을 가지는 결과만 살리는 결과를 구축한다.


사용 예)

#직접 함수를 제작하는 경우

In[28]: def func1(iter):

     ...:      if iter < 5:

     ...:          return True

     ...:      else: return False

     ...:

In[29]: a=list(filter(func1,[1,2,3,4,6,7,8,9,10]))

In[30]: a

Out[30]: [1, 2, 3, 4]


#lambda 이용

In[31]: a=list(filter(lambda x: x>5, [1,2,3,4,6,7,8,9,10]))

In[32]: a

Out[32]: [6, 7, 8, 9, 10]


#None 이용
In[33]: a= list(filter(None, [1,False,[],0,10.0,'gg']))
In[34]: a
Out[34]: [1, 10.0, 'gg']



슬라이스 내장함수


slice(stop) 또는 slice(start, stop[, step])

  ○ range(start, stop, step)에 의해 지정된 인덱스 세트를 나타낸다. 즉, 인덱싱을 하기위한 range()라고 생각하면된다.

  ○ step은 생략될 경우 1이 기본 값이다.

  ○ slice함수를 사용하는것과 : 을 사용하는 것은 동일하다.


사용 예)

In[18]: a=[i for i in range(20)]

In[18]: a

Out[18]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

In[19]: b=a[slice(10)]

In[20]: b == a[:10]

Out[20]: True

In[21]: b

Out[21]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In[22]: c=a[slice(1,10,2)]

In[23]: c == a[1:10:2]

Out[23]: True

In[24]: c

Out[24]: [1, 3, 5, 7, 9]




요소 정렬을 위한 내장함수


sorted(iterable, *, key=None, reverse=False)

  ○ 리스트를 정렬하는 sort()와는 약간 사용법이 다르다.

    ▷ sort는 list.sort() 형태로 사용하지만 sorted()함수는 sorte(input)형태로 사용한다.

  ○ iterable의 항목들을 정렬하여 새 리스트를 반환한다.

  ○ 문자열, 튜플, 리스트, 딕셔너리 등이 입력 변수로 들어가나 출력은 리스트로 된다.

    ▷ 딕셔너리를 기본 입력을 넣을 경우 key값들을 정렬해서 반환한다.

  ○ key인자는 리스트안에 리스트 혹은 리스트 안에 튜플들을 정렬할때 정렬 기준이 되는 값을 설정하는데 사용한다.  

    ▷ 예를들어, [('snow', 1), ('winter', 2), ('large', 3) ] 라는 리스트안의 튜플들을 정렬하기 위해서 기준값을 잡는데 사용한다.


사용 예)

In[33]sorted([4,53,6,75,32])

Out[33]: [4, 6, 32, 53, 75]


In[34]: a=[('snow', 3), ('winter', 1), ('large', 2) ] 

In[35]: sorted(a, key= lambda go: go[1])

Out[35]: [('winter', 1), ('large', 2), ('snow', 3)]



reversed(seq)

  ○ 입력된 객체의 순서를 뒤집는다.

  ○ 입력된 객체는 __reversed__() 메서드를 가지거나 시퀀스 프로토콜을 지원하는 객체여야 한다. 

    ▷ 파이썬 내장자료형 중에서는 리스트가 이 메서드를 사용할 수 있다.

    ▷ 클래스를 통해 새로운 자료형을 만들어 내지 않는 사용자들에겐 리스트에서 이 방법을 통해 순서를 뒤집을 수 있다는 것 정도만 알면 될듯하다.


사용 예)

In[26]: a=['good', 'batter', 'best']

In[27]: a.reverse()

In[27]: a

Out[27]: ['best', 'batter', 'good']


반응형

댓글