소개
이 섹션에서는 순서가 지정된 값 모음을 저장하는 Python 의 주요 유형인 리스트 (list) 를 소개합니다.
이 섹션에서는 순서가 지정된 값 모음을 저장하는 Python 의 주요 유형인 리스트 (list) 를 소개합니다.
리스트 리터럴 (list literal) 을 정의하려면 대괄호를 사용합니다.
names = [ 'Elwood', 'Jake', 'Curtis' ]
nums = [ 39, 38, 42, 65, 111]
때로는 다른 방법으로 리스트가 생성됩니다. 예를 들어, 문자열은 split() 메서드를 사용하여 리스트로 분할될 수 있습니다.
>>> line = 'GOOG,100,490.10'
>>> row = line.split(',')
>>> row
['GOOG', '100', '490.10']
>>>
리스트는 모든 유형의 항목을 저장할 수 있습니다. append()를 사용하여 새 항목을 추가합니다.
names.append('Murphy') ## 끝에 추가 (Adds at end)
names.insert(2, 'Aretha') ## 중간에 삽입 (Inserts in middle)
+를 사용하여 리스트를 연결합니다.
s = [1, 2, 3]
t = ['a', 'b']
s + t ## [1, 2, 3, 'a', 'b']
리스트는 정수로 인덱싱됩니다. 0 부터 시작합니다.
names = [ 'Elwood', 'Jake', 'Curtis' ]
names[0] ## 'Elwood'
names[1] ## 'Jake'
names[2] ## 'Curtis'
음수 인덱스는 끝에서부터 계산합니다.
names[-1] ## 'Curtis'
리스트의 모든 항목을 변경할 수 있습니다.
names[1] = 'Joliet Jake'
names ## [ 'Elwood', 'Joliet Jake', 'Curtis' ]
리스트의 길이.
names = ['Elwood','Jake','Curtis']
len(names) ## 3
멤버십 테스트 (in, not in).
'Elwood' in names ## True
'Britney' not in names ## True
복제 (s * n).
s = [1, 2, 3]
s * 3 ## [1, 2, 3, 1, 2, 3, 1, 2, 3]
for를 사용하여 리스트 내용을 반복합니다.
for name in names:
## use name
## e.g. print(name)
...
이것은 다른 프로그래밍 언어의 foreach 문과 유사합니다.
어떤 항목의 위치를 빠르게 찾으려면 index()를 사용합니다.
names = ['Elwood','Jake','Curtis']
names.index('Curtis') ## 2
요소가 두 번 이상 존재하면 index()는 첫 번째 발생의 인덱스를 반환합니다.
요소를 찾을 수 없으면 ValueError 예외가 발생합니다.
요소 값 또는 인덱스를 사용하여 항목을 제거할 수 있습니다.
## Using the value
names.remove('Curtis')
## Using the index
del names[1]
항목을 제거해도 구멍이 생기지 않습니다. 다른 항목은 비워진 공간을 채우기 위해 아래로 이동합니다. 요소가 두 번 이상 나타나는 경우, remove()는 첫 번째 발생만 제거합니다.
리스트는 "제자리에서 (in-place)" 정렬될 수 있습니다.
s = [10, 1, 7, 3]
s.sort() ## [1, 3, 7, 10]
## Reverse order
s = [10, 1, 7, 3]
s.sort(reverse=True) ## [10, 7, 3, 1]
## It works with any ordered data
s = ['foo', 'bar', 'spam']
s.sort() ## ['bar', 'foo', 'spam']
새로운 리스트를 만들고 싶다면 sorted()를 사용하십시오:
t = sorted(s) ## s unchanged, t holds sorted values
주의: 리스트는 수학 연산을 위해 설계되지 않았습니다.
>>> nums = [1, 2, 3, 4, 5]
>>> nums * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> nums + [10, 11, 12, 13, 14]
[1, 2, 3, 4, 5, 10, 11, 12, 13, 14]
특히, 리스트는 MATLAB, Octave, R 등에서와 같은 벡터/행렬을 나타내지 않습니다. 그러나 이를 돕는 몇 가지 패키지가 있습니다 (예: numpy).
이 연습에서는 Python 의 리스트 데이터 유형을 실험합니다. 마지막 섹션에서는 주식 기호를 포함하는 문자열을 사용했습니다.
>>> symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'
문자열의 split() 연산을 사용하여 이름을 리스트로 분할합니다:
>>> symlist = symbols.split(',')
몇 가지 조회를 시도해 보십시오:
>>> symlist[0]
'HPQ'
>>> symlist[1]
'AAPL'
>>> symlist[-1]
'GOOG'
>>> symlist[-2]
'DOA'
>>>
값을 하나 재할당해 보십시오:
>>> symlist[2] = 'AIG'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'DOA', 'GOOG']
>>>
몇 개의 슬라이스를 가져오십시오:
>>> symlist[0:3]
['HPQ', 'AAPL', 'AIG']
>>> symlist[-2:]
['DOA', 'GOOG']
>>>
빈 리스트를 생성하고 항목을 추가하십시오.
>>> mysyms = []
>>> mysyms.append('GOOG')
>>> mysyms
['GOOG']
리스트의 일부를 다른 리스트에 재할당할 수 있습니다. 예를 들어:
>>> symlist[-2:] = mysyms
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG']
>>>
이렇게 하면 왼쪽 (left-hand-side) 의 리스트 (symlist) 가 오른쪽 (right-hand-side) 의 (mysyms) 에 맞게 적절하게 크기가 조정됩니다. 예를 들어, 위의 예에서 symlist의 마지막 두 항목이 mysyms 리스트의 단일 항목으로 대체되었습니다.
for 루프는 리스트와 같은 시퀀스의 데이터를 반복하여 작동합니다. 다음 루프를 입력하고 어떤 일이 발생하는지 확인하십시오:
>>> for s in symlist:
print('s =', s)
## 출력 확인
in 또는 not in 연산자를 사용하여 'AIG', 'AA', 및 'CAT'가 심볼 리스트에 있는지 확인하십시오.
>>> ## 'AIG'가 `symlist` 에 IN 되어 있습니까?
True
>>> ## 'AA'가 `symlist` 에 IN 되어 있습니까?
False
>>> ## 'CAT'가 `symlist` 에 NOT IN 되어 있습니까?
True
>>>
append() 메서드를 사용하여 심볼 'RHT'를 symlist의 끝에 추가하십시오.
>>> symlist.append('RHT') ## append 'RHT'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>
insert() 메서드를 사용하여 심볼 'AA'를 리스트의 두 번째 항목으로 삽입하십시오.
>>> symlist.insert(1, 'AA') ## Insert 'AA' as the second item in the list
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>
remove() 메서드를 사용하여 리스트에서 'MSFT'를 제거하십시오.
>>> symlist.remove('MSFT') ## Remove 'MSFT'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT']
>>>
리스트의 끝에 'YHOO'의 중복 항목을 추가하십시오.
참고: 리스트에 중복된 값이 있는 것은 괜찮습니다.
>>> symlist.append('YHOO') ## Append 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT', 'YHOO']
>>>
index() 메서드를 사용하여 리스트에서 'YHOO'의 첫 번째 위치를 찾으십시오.
>>> symlist.index('YHOO') ## Find the first index of 'YHOO'
4
>>> symlist[4]
'YHOO'
>>>
'YHOO'가 리스트에 몇 번 있는지 세어보십시오:
>>> symlist.count('YHOO')
2
>>>
'YHOO'의 첫 번째 발생을 제거하십시오.
>>> symlist.remove('YHOO') ## Remove first occurrence 'YHOO'
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'GOOG', 'RHT', 'YHOO']
>>>
참고로, 항목의 모든 발생을 찾거나 제거하는 메서드는 없습니다. 하지만 섹션 2 에서 이를 수행하는 우아한 방법을 볼 것입니다.
리스트를 정렬하고 싶으십니까? sort() 메서드를 사용하십시오. 시도해 보십시오:
>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>
역순으로 정렬하고 싶으십니까? 다음을 시도해 보십시오:
>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>
참고: 리스트를 정렬하면 내용이 '제자리에서' 수정됩니다. 즉, 리스트의 요소가 섞이지만 결과로 새로운 리스트가 생성되지 않습니다.
문자열 리스트를 가져와서 하나의 문자열로 결합하고 싶으십니까? 다음과 같이 문자열의 join() 메서드를 사용하십시오 (참고: 처음에는 이상하게 보일 수 있습니다).
>>> a = ','.join(symlist)
>>> a
'YHOO,RHT,HPQ,GOOG,AIG,AAPL,AA'
>>> b = ':'.join(symlist)
>>> b
'YHOO:RHT:HPQ:GOOG:AIG:AAPL:AA'
>>> c = ''.join(symlist)
>>> c
'YHOORHTHPQGOOGAIGAAPLAA'
>>>
리스트는 다른 리스트를 포함하여 모든 종류의 객체를 포함할 수 있습니다 (예: 중첩된 리스트). 다음을 시도해 보십시오:
>>> nums = [101, 102, 103]
>>> items = ['spam', symlist, nums]
>>> items
['spam', ['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA'], [101, 102, 103]]
위의 출력을 자세히 살펴보십시오. items는 세 개의 요소를 가진 리스트입니다. 첫 번째 요소는 문자열이지만, 다른 두 요소는 리스트입니다.
여러 인덱싱 (indexing) 연산을 사용하여 중첩된 리스트의 항목에 접근할 수 있습니다.
>>> items[0]
'spam'
>>> items[0][0]
's'
>>> items[1]
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>> items[1][1]
'RHT'
>>> items[1][1][2]
'T'
>>> items[2]
[101, 102, 103]
>>> items[2][1]
102
>>>
기술적으로 매우 복잡한 리스트 구조를 만드는 것이 가능하지만, 일반적으로는 간단하게 유지하는 것이 좋습니다. 일반적으로 리스트는 모두 동일한 종류의 값을 가진 항목을 포함합니다. 예를 들어, 숫자만으로 구성된 리스트 또는 텍스트 문자열의 리스트가 있습니다. 동일한 리스트에 서로 다른 종류의 데이터를 혼합하는 것은 종종 머리가 복잡해지는 좋은 방법이므로 피하는 것이 좋습니다.
축하합니다! 리스트 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.