본문 바로가기

인공지능/데이터 분석

2일차 (2) 챕터 3 리스트, 딕셔너리

반응형

리스트

  • 튜플과는 대조적으로 리스트는 크기나 내용의 변경이 가능하다.
  • 리스트는 대괄호 []나 list 함수를 사용해서 생성할 수 있다.
 
[1]:
a_list = [2,3,7, None]
tup = ('foo', 'bar', 'baz')
b_list = list(tup)
 
 
 
[2]:
b_list
 
[2]:
['foo', 'bar', 'baz']
 
[3]:
b_list[1] = 'peekaboo' #리스트는 그 속 값을 변경할 수 있다.
 
 
 
[4]:
b_list
 
[4]:
['foo', 'peekaboo', 'baz']
 
  • 리스트와 튜플은 의미적으로 비슷한(비록 튜플을 수정할 수 없지만) 객체의 1차원 순차 자료형이며, 많은 함수에서 교차적으로 사용할 수 있다.
  • list 함수는 이터레이터나 제너레이터 표현에서 실제 값을 모두 담기 위한 용도로도 자주 사용된다.
 
[5]:
gen = range(10)
 
 
 
[6]:
gen
 
[6]:
range(0, 10)
 
[7]:
list(gen)
 
[7]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 

리스트에 원소 추가하고 삭제하기

 
[8]:
b_list.append('dwarf')
 
 
 
[9]:
b_list
 
[9]:
['foo', 'peekaboo', 'baz', 'dwarf']
 
[10]:
b_list.insert(1, 'red') # 위치, 값
 
 
 
[11]:
b_list
 
[11]:
['foo', 'red', 'peekaboo', 'baz', 'dwarf']
 

pop 메서드

 
[12]:
b_list.pop(2)
 
[12]:
'peekaboo'
 
[13]:
b_list
 
[13]:
['foo', 'red', 'baz', 'dwarf']
 

remove 함수를 이용해 원소를 삭제할 수 있다.

 
[14]:
b_list.append('foo')
 
 
 
[15]:
b_list
 
[15]:
['foo', 'red', 'baz', 'dwarf', 'foo']
 
[18]:
b_list.remove('foo') # 제일 앞 원소부터 삭제가 되어야 한다.
 
 
 
[17]:
b_list
 
[17]:
['red', 'baz', 'dwarf', 'foo']
 

in 예약어를 사용해서 리스트에 어떤 값이 들어있는지 검사할 수 있다.

 
[19]:
'dwarf' in b_list
 
[19]:
True
 

not 예약어를 붙여 in 예약어의 반대 의미로 사용할 수 있다.

 
[20]:
'dwarf' not in b_list
 
[20]:
False
 

리스트 이어붙이기

 
[21]:
[4, None, 'foo'] + [7, 8, (2, 3)]
 
[21]:
[4, None, 'foo', 7, 8, (2, 3)]
 
[22]:
x = [4, None, 'foo']
x.extend([7, 8, (2, 3)])
 
 
 
[23]:
x
 
[23]:
[4, None, 'foo', 7, 8, (2, 3)]
 
[24]:
everything = []
for chunk in list_of_lists:
everything.extend(chunk)
 
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[24], line 2
      1 everything = []
----> 2 for chunk in list_of_lists:
      3     everything.extend(chunk)

NameError: name 'list_of_lists' is not defined
 

정렬

  • sort 함수를 이용해서 새로운 리스트를 생성하지 않고 있는 그대로 리스트를 정렬할 수 있다.
 
[25]:
a = [7, 2, 5, 1, 3]
a.sort()
 
 
 
[26]:
a
 
[26]:
[1, 2, 3, 5, 7]
 
[27]:
b = ['saw', 'small', 'He', 'foxes', 'six']
b.sort(key=len)
 
 
 
[28]:
b
 
[28]:
['He', 'saw', 'six', 'small', 'foxes']
 

이진 탐색과 정렬된 리스트 유지하기

  • 내장 bisect 모듈은 이진 탐색과 정렬된 리스트에 값을 추가하는 기능을 제공한다. bisect.bisect 메서드는 값이 추가될 때 리스트가 정렬된 상태를 유지할 수 있는 위치를 반환하며, bisect.insort는 실제로 정렬된 상태를 유지한 채 값을 추가한다.
 
[29]:
import bisect
 
 
 
[30]:
c = [1, 2, 2, 2, 3, 4, 7]
bisect.bisect(c, 2)
 
[30]:
4
 
[31]:
bisect.bisect(c, 5)
 
[31]:
6
 
[32]:
bisect.insort(c, 6)
 
 
 
[33]:
c
 
[33]:
[1, 2, 2, 2, 3, 4, 6, 7]
 

슬라이싱

  • 리스트와 같은 자료형(배열, 튜플, ndarray)은 색인 연산자 [] 안에 start:stop을 지정해서 원하는 크기만큼 잘라낼 수 있다.
 
[35]:
seq = [7, 2, 3, 7, 5, 6, 0, 1]
seq[1:5]
 
[35]:
[2, 3, 7, 5]
 
[36]:
seq[3:4] = [6,3]
 
 
 
[37]:
seq
 
[37]:
[7, 2, 3, 6, 3, 5, 6, 0, 1]
 

내장 순차 자료형 함수

  • 파이썬에는 순차 자료형에 사용할 수 있는 매우 유용한 함수가 있는데, 이 함수들은 꼭 익혀서 기회가 될 때 마다 사용할 수 있어야 한다.
 

enumerate

  • 이 함수는 순차 자료형에서 현재 아이템의 색인을 함께 처리하고자 할 때 흔히 사용한다.
 
[39]:
Selection deleted
some_list = ['foo', 'bar', 'baz']
 
mapping = {}
 
for i, v in enumerate(some_list):
mapping[v] = i
 
 
 
[40]:
mapping
 
[40]:
{'foo': 0, 'bar': 1, 'baz': 2}
 

sorted

  • sorted 함수는 정렬된 새로운 순차 자료형을 반환한다.
 
[41]:
sorted([7, 1, 2, 6, 0, 3, 2])
 
[41]:
[0, 1, 2, 2, 3, 6, 7]
 
[42]:
sorted('horse race')
 
[42]:
[' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']
 

zip

  • 여러 개의 리스트나 튜플 또는 다른 순차 자료형을 서로 짝지어서 튜플의 리스트를 생성한다.
 
[43]:
seq1 = ['foo', 'bar', 'baz']
seq2 = ['one', 'two', 'three']
 
zipped = zip(seq1, seq2)
list(zipped)
 
[43]:
[('foo', 'one'), ('bar', 'two'), ('baz', 'three')]
 
[45]:
seq3 = [False, True]
 
list(zip(seq1, seq2, seq3)) # 리스트의 크기는 넘겨받은 순차 자료형 중 가장 짧은 크기로 정해진다.
 
[45]:
[('foo', 'one', False), ('bar', 'two', True)]
 
[46]:
for i, (a, b) in enumerate(zip(seq1, seq2)):
print('{0}: {1}, {2}'.format(i, a, b))
 
0: foo, one
1: bar, two
2: baz, three
 

reversed

  • reversed 순차 자료형을 역순으로 순회한다.
 
[47]:
list(reversed(range(10)))
 
[47]:
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 

사전

  • 일반적으로 해시맵 또는 연관 배열이라고 널리 알려져 있다.
 
[48]:
empty_dict = {}
 
d1 = {'a' : 'some value', 'b': [1,2,3,4]}
 
d1
 
[48]:
{'a': 'some value', 'b': [1, 2, 3, 4]}
 

순차 자료형에서 사전 생성하기

 
[49]:
mapping = {}
for key, value in zip(key_list, value_list):
mapping[key] = value
 
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[49], line 2
      1 mapping = {}
----> 2 for key, value in zip(key_list, value_list):
      3     mapping[key] = value

NameError: name 'key_list' is not defined
 

리스트, 집합, 사전 표기법

 
[50]:
strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
 
[x.upper() for x in strings if len(x) > 2]
 
[50]:
['BAT', 'CAR', 'DOVE', 'PYTHON']
 
[ ]:
 
반응형