리스트란
- 파이썬 기본 자료구조 형태중 하나
- 값을 나열한 것
- 시퀀스데이터 (자료의 순서가 있는 것)
- 자료의 변경, 삭제 , 추가가 자유로움.
리스트만들기
letters1 = ['a','b','c']
letters2 = ['d','e','f']
리스트명 = [ 원소1, 원소2, 원소3 , ... ]
위와 같이
리스트명 = [ 원소1, 원소2, 원소3 , ... ] 이런 형식으로 리스트를 생성할 수 있다.
내부원소의 자료형이 통일될 필요는 없다.
리스트 인덱싱
원소 |
a |
b |
c |
d |
e |
인덱스 |
0 |
1 |
2 |
3 |
4 |
letters1 = ['a','b','c','d','e']
print(letters1[0])
print(letters1[1])
print(letters1[2])
letters1[0] = 3
print(letters1)
a
b
c
[3, 'b', 'c', 'd', 'e']
파이썬 리스트의 인덱스는 0부터 시작하며 첫 원소부터 차례대로 대응된다.
만약 print(letters1[3])
이와 같이 리스트에 없는 인덱스의 원소를 요청했다면 오류가 발생된다.
인덱싱을 활용하면 자료의 변경이 쉽게 가능하다.
리스트 슬라이싱
print(letters1[:3])
print(letters1[2:])
print(letters1[2:3])
print(letters1[2:3][0])
print(letters1[::2])
print(letters1[1::2])
['a', 'b', 'c']
['c', 'd', 'e']
['c']
c
['a', 'c', 'e']
['b', 'd']
리스트의 일부를 잘라 리스트로 반환한다.
이때 중요한 점은 리스트로 반환한다는 점이다.
3번째 경우 슬라이싱의 결과도 원소의 갯수가 1인 리스트로 반환이 되기 때문에 원소에 직접 접근하고 싶다면
4번째줄의 코드와 같이 인덱싱을 진행해주어야한다.
다중리스트
리스트안에 리스트가 있는경우
letters1 = ['a','b','c','d','e']
letters2 = [letters1, 'f', 'g']
print(letters2)
print(letters2[0][2])
[['a', 'b', 'c', 'd', 'e'], 'f', 'g']
c
원소 |
['a', 'b', 'c', 'd', 'e'] |
f |
g |
인덱스 |
0 |
1 |
2 |
c에 접근하고싶다면 먼저 letters2의 첫번째 원소인 letters1에 접근하고 해당 리스트에서 인덱스로 접근한다.
리스트 함수
1. len
print(len(letters1))
print(len(letters2))
5
3
리스트의 길이를 반환해준다.
다중리스트의 경우 내부리스트가 얼마나 길든 1로 계산한다.
2. 리스트 이어붙이기
letters1 = ['a','b','c']
letters2 = ['d','e','f']
print(letters1 + letters2)
nums1 = [1,2,3]
nums2 = [4,5,6]
print(nums1 + nums2)
print(nums1 * 3)
['a', 'b', 'c', 'd', 'e', 'f']
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
더하기 연산자로 이을 수 있다.
모든 원소가 숫자인 리스트도 각 인덱스에 대응하는 원소끼리의 연산이 아닌 두 리스트를 이은 리스트가 반환된다.
곱하기 연산자를 사용할 경우 곱하는 숫자만큼 리스트의 원소를 반복한 뒤 반환한다.
3. in
print('a' in letters1)
print('A' in letters1)
print('a' in letters2)
True
False
False
리스트에 해당하는 원소가 있으면 True 없으면 FALSE를 반환한다.
파이썬은 대소문자를 구분한다.
letters2에는 'a'가 있어보이지만 letters2에 있는 letters1에 a가 존재하는 것이다.
4. count
letters3 = ['a','a','b']
letters3.count('a')
2
리스트내의 일치하는 원소의 갯수를 세어준다
5. append
print(letters1)
letters1.append('f')
print(letters1)
['a', 'b', 'c']
['a', 'b', 'c', 'f']
리스트의 맨뒤에 새로운 원소를 삽입한다.
nums1 = [1,2,3]
nums2 = [4,5,6]
result = []
for i in range(len(nums1)):
result.append(nums1[i]+nums2[i])
print(result)
[5, 7, 9]
이런식으로 빈리스트에 새로운 값들을 추가할 수도있다.
6. insert
맨뒤에 값을 추가하는 append와는 다르게 insert는 원하는 위치에 값을 삽입할 수 있다.
print(letters1)
letters1.insert(1,'A')
print(letters1)
['a', 'b', 'c', 'd', 'e']
['a', 'A', 'b', 'c', 'd', 'e']
7. pop
print(letters1)
k = letters1.pop(1)
print(letters1)
print(k)
['a', 'A', 'b', 'c', 'd', 'e']
['a', 'b', 'c', 'd', 'e']
A
원하는 인덱스의 값을 빼내어 준다. 빼낸값을 저장할 수도 있다.
인덱스를 입력하지 않으면 제일 뒤의 값을 빼내어 준다.
이런식으로 값이 순환하게 할 수도 있다.
print(letters1)
k = letters1.pop(0)
letters1.append(k)
print(letters1)
['a', 'b', 'c', 'd', 'e']
['b', 'c', 'd', 'e', 'a']
8. remove
print(letters1)
letters1.remove('b')
print(letters1)
['a', 'b', 'c', 'd', 'e']
['a', 'c', 'd', 'e']
해당하는 원소를 삭제한다.
9. sort
nums = [5, 2, 22, 4, 5, 3, 7, 1]
words = ['apple', 'banana', 'python', 'list', 'woo','Java', 'won']
nums.sort()
words.sort()
print(nums)
print(words)
nums.sort(reverse=True)
words.sort(reverse=True)
print(nums)
print(words)
[1, 2, 3, 4, 5, 5, 7, 22]
['Java', 'apple', 'banana', 'list', 'python', 'won', 'woo']
[22, 7, 5, 5, 4, 3, 2, 1]
['woo', 'won', 'python', 'list', 'banana', 'apple', 'Java']
리스트 내의 원소들을 정렬하여 반환한다. 기본값은 오름차순이다.
10. reverse
words = ['apple', 'banana', 'python', 'list', 'woo','Java', 'won']
print(words)
words.reverse()
print(words)
['apple', 'banana', 'python', 'list', 'woo', 'Java', 'won']
['won', 'Java', 'woo', 'list', 'python', 'banana', 'apple']
리스트의 원소의 순서를 뒤집어 반환한다.
11. index
words = ['apple', 'banana', 'python', 'list', 'woo','woo','Java', 'won']
print(words.index('woo'))
words[words.index('woo')] = 'hye'
print(words)
4
['apple', 'banana', 'python', 'list', 'hye', 'woo', 'Java', 'won']
리스트안에 일치하는 원소의 첫번째 인덱스를 반환한다.
산출된 인덱스를 이용해서 원소를 변경도 가능하다.
리스트안에 일치하는 원소가 없다면 오류를 반환한다.