나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Language/python

[python] list

devidea 2018. 3. 28. 11:48
알고 있는 내용을 정리하는 수준으로 블로그에 글을 적으려고 한다.
python 문법에 대한 2번째 내용이다.

모든 언어에서 제일 많이 사용하는 데이터 구조인 list. python에서 유용한 것들 정리해 보자.


정의 방법
# 빈 리스트 정의
my_list = []
my_list = list()

# 값과 함께 정의 (여러 데이터 타입들의 섞어서도 가능하다)
my_list1 = [1,2,3]
my_list2 = [“a”, “b”, “c”]
my_list3 = [“a”, 1, “python”, 5]

# list들의 list도 가능
my_nested_list = [my_list1, my_list2]

# list의 병합
combo_list = my_list1 + mylist2    # [1, 2, 3, “a”, “b”, “c”]

append(), extend(), insert()의 차이점
# append는 object를 맨 뒤에 추가한다.
x = [1, 2, 3]
x.append([4, 5])    # [1, 2, 3, [4, 5]]

# extend는 iterable 객체(리스트, 튜플, 딕셔너리 등)의 요소들을 list에 appending 시킨다.
y = [1, 2, 3]
y.extend([4, 5])    # [1, 2, 3, 4, 5]

# insert - 주어진 index에 값을 추가한다.
list = ['a', 'b', 'c’]
list.insert(0, 'x')


List slices

list = ['a', 'b', 'c', 'd']
print list[1:-1]   ## ['b', 'c’]

list[0:2] = 'z'    ## replace ['a', 'b'] with ['z']
print list         ## ['z', 'c', 'd']


List 정렬
# 오름차순으로 정렬하기 (sorted의 기본이 오름차순)
a = [5, 1, 4, 3]
print sorted(a)      ## [1, 3, 4, 5]
print a              ## [5, 1, 4, 3]

# 내림차순으로 정렬하기
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs)                  ## ['BB', 'CC', 'aa', 'zz'] (case sensitive)
print sorted(strs, reverse=True)    ## ['zz', 'aa', 'CC', 'BB’]

# custom sorting key
# 1. len 함수를 통해 요소의 길이 순으로 정렬을 한다.
strs = ['ccc', 'aaaa', 'd', 'bb’]
print sorted(strs, key=len)         ## ['d', 'bb', 'ccc', 'aaaa’]

# 새로운 함수를 만들어서 정렬 조건으로 활용.
# 맨 뒤 글자를 조건으로 정렬.
strs = ['xc', 'zb', 'yd' ,'wa']
def MyFn(s):
    return s[-1]
print sorted(strs, key=MyFn)  ## ['wa', 'zb', 'xc', 'yd’]

# 참고사항 - sort() 함수의 결과값은 None이다.
alist.sort()            ## correct
alist = blist.sort()    ## NO incorrect, sort() returns None

List Comprehensions

[ expr for var in list ] - for var in list
List 안에서 위와 같은 문법으로 for 문과 같은 동작을 수행 할 수 있다. 중첩으로도 가능하기 때문에 여러개의 for문을 쓸 코드를 간단히 작성할 수 있다.
개인적으로 python의 생산성이 높은 주요한 이유 중 하나라고 생각한다.
# 기본 동작
nums = [1,2,3,4]
squares = [ n * n for n in nums ]     ## [1, 4, 9, 16]

# List Comprehensions 안에서 특정 함수의 호출도 가능하다.
strs = ['hello', 'and', 'goodbye']
shouting = [ s.upper() + '!!!' for s in strs ]        ## ['HELLO!!!', 'AND!!!', 'GOODBYE!!!’]

# List에 if syntax를 적용하여 조건을 걸 수도 있다.
nums = [2, 8, 1, 6]
small = [ n for n in nums if n <= 2 ]                      ## [2, 1]
fruits = ['apple', 'cherry', 'bannana', 'lemon']
afruits = [ s.upper() for s in fruits if 'a' in s ]        ## ['APPLE', 'BANNANA']

[참고]


반응형

'Language > python' 카테고리의 다른 글

[python] 상속 기본 및 factory method 패턴 정리  (0) 2018.03.27
Generators (제너레이터)  (0) 2017.04.12