#18-파이썬 기초 실습 - 리스트(List) - 7

2020. 1. 29. 07:52AI & BigData/Python Basics

파이썬 기초 실습 - 리스트(List) - 7

1. 리스트의 자료구조 활용

  • 스택 구조
    • 스택 데이터 구조는 제일 마지막에 넣은 데이터부터 순서대로 꺼내는 Last In First Out(LIFO, 후입선출) 구조이다.
    • append -> pop()을 이용하면 맨 뒤에 데이터를 넣고 맨 뒤의 데이터를 꺼낼 수 있는 스택의 LIFO 구조가 된다.

In [1]:

stack = ['A', 'B', 'C', 'D', 'E', 'F']
stack.append('G')  # 맨 뒤에 데이터를 추가한다.
stack              # G 가 맨 뒤에 추가된 것을 알 수 있다.

Out[1]:

['A', 'B', 'C', 'D', 'E', 'F', 'G']

In [2]:

lifo_data = stack.pop()  # 맨뒤에 값 G가 lifo_data에 추가 되고 삭제가 된다.
stack                    # ['A', 'B', 'C', 'D', 'E', 'F']

Out[2]:

['A', 'B', 'C', 'D', 'E', 'F']

In [3]:

lifo_data

Out[3]:

'G'

2. 큐 구조

  • 큐 데이터 저장 구조는 들어오는 순서대로 데이터를 꺼낼 수 있는 First In First Out(FIFO, 선입선출)구조이다.
  • append -> pop(0)을 이용하여 큐 데이터 저장 구조로 사용할 수 있다.

In [4]:

queue = ['A', 'B', 'C', 'D', 'E', 'F']
queue.append('G')  # 뒤에 데이터를 추가한다.
queue  # [10, 20, 30, 40, 50, 60]

Out[4]:

['A', 'B', 'C', 'D', 'E', 'F', 'G']

In [5]:

fifo_data = queue.pop(0)  # 0번 인덱스의 값을 출력하고 Garbage Collection에 반환한다.
queue  # ['B', 'C', 'D', 'E', 'F', 'G']  # 반복을 하면. 값이 깨속 꺼내다가 값이 없으면 에러를 반환

Out[5]:

['B', 'C', 'D', 'E', 'F', 'G']

In [6]:

fifo_data

Out[6]:

'A'

3. 리스트의 정렬

  • 반환하지 않는 리스트 순서 정렬

In [7]:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a)
print('--'* 20)
a.sort()  # .sort() 메서드를 사용하면 a를 눌러야 바뀐 내용을 확인 할 수 있다.
print(a)
print('--'* 20)
b = [1, 6, 3, 8, 6, 2, 9]
print(b)
print('--'* 20)
sorted(b)  # [1, 2, 3, 6, 6, 8, 9].     sorted() 내장 함수를 이용하면 입력하는 순간 출력도 된다.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
----------------------------------------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
----------------------------------------
[1, 6, 3, 8, 6, 2, 9]
----------------------------------------

Out[7]:

[1, 2, 3, 6, 6, 8, 9]

4. 오름차순과 내림차순 정렬.

  • reverse가 True 내림차순 False면 오름차순. 기본은 F

In [8]:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a.sort(reverse=False)  # 오름차순으로 정렬한다.
a  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Out[8]:

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

In [9]:

b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
b.sort(reverse=True)  # 내림차순으로 정렬한다.
b  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Out[9]:

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

5. 내장 메서드의 key 속성을 통한 리스트 정렬

In [10]:

a = ['123', '45', '67', '8901']
a.sort(key=int)  # String(문자열)인 값을 int로 형변환을 하고 크기 순서대로 정렬한다
a  # ['45', '67', '123', '8901']. int로 바꿨을 때 크기 순서대로 정렬된 것을 확인.

Out[10]:

['45', '67', '123', '8901']

In [11]:

b = ['10', '20', '15', '25', '225', '335', '44']
b.sort(key = str)  # String값을 String 순서대로 정렬한다.
b  # ['10', '15', '20', '225', '25', '335', '44'] String 순서대로 정렬된 것을 확인.

Out[11]:

['10', '15', '20', '225', '25', '335', '44']

6. 반환하지 않는 리스트의 역순 정렬, 반환하는 리스트의 역순 정렬.

In [12]:

a = [1, 2, 3, 9, 8, 7, 6]
a.reverse()  # .reverse() 메서드를 사용하면 a를 출력하면 반전된것을 확인가능
a  # [6, 7, 8, 9, 3, 2, 1]

Out[12]:

[6, 7, 8, 9, 3, 2, 1]

In [13]:

b = [1, 2, 3, 9, 8, 7, 6]
reversed(b)   # <list_reverseiterator at 0x10f0746f1c8>  ==  sorted()와 다르게 주소값 출력.

Out[13]:

<list_reverseiterator at 0x209607213c8>

In [14]:

list(reversed(b))  # [6, 7, 8, 9, 3, 2, 1]

Out[14]:

[6, 7, 8, 9, 3, 2, 1]

7. 리스트 for 문

  • 리스트 내에서 포(for) 문 사용 형식
  • [표현식 for 항목 in 컨테이너 객체[개장함수] if 조건문]

In [15]:

list_for = []  # 리스트형 변수 선언

for i in range(10):  # 0 ~ 9 까지 증가 하는 for문 생성
    list_for.append( i * i)
print(list_for)

# 결과 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 0 ~ 9 까지의 숫자를 계속 제곱한 값을 list_for 문에 삽입합니다.
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

In [16]:

list_for2 = [i * i for i in range(10)]
print(list_for2)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

In [17]:

list_for == list_for2

Out[17]:

True

In [18]:

# 결과는 위와 동일하지만.. 코드 실행 줄이 조금 줄어드는 효과가 있습니다.

8. 리스트 for 문 활용

In [19]:

list_for3 = []
for i in range(2,20,6):
    for j in range(3,20,9):
        if ( i + j ) % 5 == 0:
            list_for3.append((i,j,i*j))
list_for3

Out[19]:

[(2, 3, 6), (8, 12, 96)]

In [20]:

list_for4 = [(i, j, i * j) for i in range(2, 20, 6) for j in range(3, 20, 9) if (i + j) % 5 == 0]
print(list_for4)
[(2, 3, 6), (8, 12, 96)]

In [21]:

list_for3 == list_for4
# list_for3 과 list_for4 의 값은 동일하다는 것을 알수 있습니다.

Out[21]:

True

9. 튜플 형태로 리스트에 저장

  • 중첩 포문 사용

In [22]:

a = 'abc'
b = (1, 2, 3)
c = []
for x in a:
    for y in b:
        c.append((x,y))
print(c)
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]

In [23]:

a = 'abc'
for x in a:
    print(x) #  a,b,c 세번 반복 되는것을 확인 할수 있음. 
a
b
c

In [24]:

a = 'abc'
b = (1, 2, 3)
c = []
[c.append((x, y)) for x in a for y in b]
print(c)
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]

10. 리스트 형태로 리스트에 저장

In [25]:

words = '파이썬이 좋아서 파이썬 공부를 시작했습니다. 기초부터 하나씩 배워서 훌륭한 사람이 되고 싶어요..'.split()
words_1 = []
for w in words:
    words_1.append([w.upper(), w.lower(), len(w)])
print(words_1)
[['파이썬이', '파이썬이', 4], ['좋아서', '좋아서', 3], ['파이썬', '파이썬', 3], ['공부를', '공부를', 3], ['시작했습니다.', '시작했습니다.', 7], ['기초부터', '기초부터', 4], ['하나씩', '하나씩', 3], ['배워서', '배워서', 3], ['훌륭한', '훌륭한', 3], ['사람이', '사람이', 3], ['되고', '되고', 2], ['싶어요..', '싶어요..', 5]]

In [28]:

words = '파이썬이 좋아서 파이썬 공부를 시작했습니다. 기초부터 하나씩 배워서 훌륭한 사람이 되고 싶어요..'.split()
words_2 = [[w.upper(), w.lower(), len(w)] for w in words]
print(words_2)
[['파이썬이', '파이썬이', 4], ['좋아서', '좋아서', 3], ['파이썬', '파이썬', 3], ['공부를', '공부를', 3], ['시작했습니다.', '시작했습니다.', 7], ['기초부터', '기초부터', 4], ['하나씩', '하나씩', 3], ['배워서', '배워서', 3], ['훌륭한', '훌륭한', 3], ['사람이', '사람이', 3], ['되고', '되고', 2], ['싶어요..', '싶어요..', 5]]

In [29]:

words_1 == words_2

Out[29]:

True

In [ ]: