마케팅/데이터분석(파이썬)

(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 8 / 리스트

프로그래밍

통상 프로그래밍은 알고리즘과 자료구조로 나눌 수 있습니다. 알고리즘이 특정 문제를 해결하기 위한 규칙 또는 단계라면, 자료구조는 컴퓨터내에서 자료를 구조화하는 특별한 방식이라고 할 수 있습니다.

 

무엇이 컬렉션이 아닌가?

컬렉션이 무엇인지 알기 위해 우리는 컬렉션이 아닌 것을 알아야 합니다. 하나의 변수에 새로운 값을 할당하게 되면 기존의 값은 사라지고 그 자리에 대체하게 됩니다. 즉, 하나의 변수에는 하나의 값만 할당하는 것을 우리는 배웠습니다. 하나의 변수에 여러 값을 넣는 것이 가능하도록 하는 것이 컬렉션입니다.

 

리스트 (List)

리스트는 컬렉션의 한 종류입니다.

1. 리스트의 각 항목들은 '[]'로 둘러싸게 됩니다.

2. 리스트 내의 항목들에 대한 구분은 ,(콤마)로 합니다.

3. 리스트 내에 또 다른 리스트를 내포할 수 있습니다.

4. 비어있는 리스트를 만들 수 있습니다.

5. 리스트의 항목들에 인덱스 값으로 접근할 수 있습니다.

6. 리스트의 항목들은 바뀔 수 있습니다.

friends = ['Joseph', 'Glennn', 'Sally']
carryon = ['socks', 'shirt', 'perfume']
colors = ['red', ['yellow', 'blue'], 'black']
emptyList = []
print(colors[0])
#red라고 출력됨
lotto = [2, 14, 24, 41, 63]
print(lotto)
#[2, 14, 26, 41, 63]이 출력됨
lotto[2] = 28
print(lotto)
#[2, 14, 26, 41, 63]이 출력됨

 

len()

리스트에서도 해당 리스트가 몇개의 항목을 가지고 있는 지를 len()함수를 통해서 확인할 수 있습니다.

friends = ['Joseph', 'Glenn', 'Sally']
print(len(friends))
#3으로 출력됨.

 

range()

range() 함수는 인자로 전달되는 값에 따라서 숫자로 이루어진 리스트를 반환하게 됩니다.

for i in range(5):
    print(i)

#0
#1
#2
#3
#4

 

연산자 활용

 

리스트 병합

리스트 타입도 '+' 연산자를 활용해서 서로 다른 리스트를 더할 수 있습니다.

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)
#[1, 2, 3, 4, 5, 6]로 출력됨

 

리스트 슬라이싱

리스트도 :(콜론)을 이용해 자를 수 있습니다. 중요한 것은 마지막 숫자의 인덱스 항목은 포함되지 않는다는 것입니다.

t = [9, 41, 12, 3, 74, 15]
print(t[1:3])
print(t[:4])
print(t[3:])
print(t[:])

#[41, 12]
#[9, 41, 12, 3]
#[3, 74, 15]
#[9, 41, 12, 3, 74, 15]

 

dir() 메소드

특정 타입에서 사용할 수 있는 메소드의 목록들을 볼 수 있는 함수도 있다.

x = list()
print(dir(x))

 

리스트 만들기

빈 리스트 만들기 - 항목 추가하기 - 항목 정렬하기 - in을 활용해 'Glenn'이 친구목록에 있는 지 확인하기

friends = list()
friends.append('Joseph')
friends.append('Glenn')
friends.append('Sally')
print(friends)
#['Joseph', 'Glenn', 'Sally']
friends.sort()
print(friends)
#['Glenn', 'Joseph', 'Sally']
print('Glenn' in friends)
#True

 

문자열과 리스트

문자열과 리스트는 잘 어울려 사용됩니다.

abc = 'With three words'
stuff = abc.split()
print(stuff)

#['With', 'three', 'words']로 출력됩니다.

 

구분자

명시적으로 구분자를 넣어주지 않으면 빈칸을 구분자로 인지하고 나누게 됩니다.

words2 = 'first;second;third'
stuff2 = words2.split()
print(stuff2)
#['first;second;third']
stuff2 = words2.split(';')
print(stuff2)
#['first', 'second', 'third']

 

이메일 주소 추출하기

지금까지 배운 메소드와 자료구조를 활용하면 원하는 값만 추출할 수 있습니다.

line = 'From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008'
#line에 uct.ac.za만 추출하는 방법을 찾아보도록 하겠습니다
words = line.split()
#words는 해당 라인을 빈칸을 구분자로 하여 리스트로 저장됩니다.
print(words[1])
#stephen.marquard@uct.ac.za 출력됨
email = words[1]
address = email.split('@')
print(address)
#['stephen.marquard', 'uct.ac.za']가 출력됩니다.
print(address[1])
#uct.ac.za가 출력됨