List : 배열과 같이 여러개의 데이터를 나열한 자료구조
- '[]'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.
- list = ['a', 'b', 'c'] --> a, b, c는 아이템(요소)라고 한다.
- 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
- List에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.
strs = [3.14, '십', 20, 'one', '3.141592']
print('strs : {}'.format(strs))
print(type(strs))
>>
strs : [3.14, '십', 20, 'one', '3.141592']
<class 'list'>
1. Index : 아이템에 자동으로 부여되는 번호표
- 맨 앞부터 0
- 잘못된 인덱스 사용하면 에러 발생 IndexError
- 개별 아이템을 인덱스로 뽑아내면 아이템 본연의 Data type으로 바뀜.
numbers = [10, 20, 30, 40, 50]
print('numbers : {}'.format(numbers))
print('numbers[0] : {}'.format(numbers[0]))
print('numbers[1] : {}'.format(numbers[1]))
print('numbers[2] : {}'.format(numbers[2]))
print('numbers[3] : {}'.format(numbers[3]))
print('numbers[4] : {}'.format(numbers[4]))
print('numbers[0] : {}'.format(type(numbers[0])))
>>
numbers : [10, 20, 30, 40, 50]
numbers[0] : 10
numbers[1] : 20
numbers[2] : 30
numbers[3] : 40
numbers[4] : 50
numbers[0] : <class 'int'>
2. len() 함수 : list의 길이를 반환 (list에 저장된 아이템 개수)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
print('List : {}'.format(students))
print('List의 길이 : {}'.format(sLength))
str = 'Hello python!!'
print('문자열의 길이 : {}'.format(len(str)))
>>
List : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
List의 길이 : 5
문자열의 길이 : 14
len()과 반복문을 이용하면 list의 아이템 조회가 가능
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
for i in range(len(students)):
print(students[i])
n = 0
sLength = len(students)
while n < sLength:
print(students[n])
n += 1
for item in students:
print(item)
>>
홍길동
박찬호
이용규
박승철
김지은
3. list와 for문
- for문을 이용하면 list의 아이템을 자동으로 참조할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
for i in range(len(students)):
print(students[i])
for student in students:
print(student)
>>
홍길동
박찬호
이용규
박승철
김지은
- list 내부의 또 다른 list 내 아이템을 조회할 수도 있다.
studentCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]
for i in range(len(studentCnts)):
print('{}반 학생수 : {}'.format(studentCnts[i][0], studentCnts[i][1]))
for classNo, cnt in studentCnts:
print('{}반 학생수 : {}'.format(classNo, cnt))
>>
1반 학생수 : 19
2반 학생수 : 20
3반 학생수 : 22
4반 학생수 : 18
5반 학생수 : 21
- for문과 if문을 이용해서 과락 과목(60점 미만) 출력하기
scores = [['국어', 58],
['영어', 77],
['수학', 89],
['과학', 99],
['국사', 50]]
minScore = 60
for item in scores:
if item[1] < minScore:
print('과락 과목 : {}, 점수 : {}'.format(item[0], item[1]))
for subject, score in scores:
if score < minScore:
print('과락 과목 : {}, 점수 : {}'.format(subject, score))
for subject, score in scores:
if score >= minScore:
continue
print('과락 과목 : {}, 점수 : {}'.format(subject, score))
>>
과락 과목 : 국어, 점수 : 58
과락 과목 : 국사, 점수 : 50
4. list와 while문
- while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
n = 0
while n < len(cars):
print(cars[n])
n += 1
n = 0
flag = True
while flag:
print(cars[n])
n += 1
if n == len(cars):
flag = False
n = 0
while True:
print(cars[n])
n += 1
if n == len(cars):
break
>>
그랜저
소나타
말리부
카니발
쏘렌토
- list 내부의 또 다른 list 내 아이템을 조회할 수도 있다.
studentCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]
sum = 0
n = 0
while n < len(studentCnts):
classNo = studentCnts[n][0]
cnt = studentCnts[n][1]
print('{}반 학생수 : {}'.format(classNo, cnt))
sum += cnt
n += 1
print(f'전체 학생 수 : {sum}명')
print(f'평균 학생 수 : {int(sum / len(studentCnts))}명')
>>
1반 학생수 : 19
2반 학생수 : 20
3반 학생수 : 22
4반 학생수 : 18
5반 학생수 : 21
전체 학생 수 : 100명
평균 학생 수 : 20명
5. enumerate()
- enumerate() 함수를 이용하면 아이템을 열거할 수 있다.
sports = ['농구', '수구', '축구', '마라톤', '테니스']
for idx, value in enumerate(sports):
print('{} : {}'.format(idx, value))
>>
0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스
- 가장 좋아하는 스포츠가 몇 번째에 있는지 출력하는 프로그램
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoriteSportInput = input('가장 좋아하는 스포츠 : ')
n = 0
for idx, value in enumerate(sports):
if value == favoriteSportInput:
n = idx + 1
print('{}(은)는 {}번째에 있습니다.'.format(favoriteSportInput, n))
>>
가장 좋아하는 스포츠 : 축구
축구(은)는 3번째에 있습니다.
6. append()
- append() 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.
scores = [['국어', 88],
['영어', 91]]
scores.append(['수학', 96])
print(f'scores : {scores}')
>>
scores : [['국어', 88], ['영어', 91], ['수학', 96]]
7. insert()
- insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students.insert(3, '강호동')
print(f'students : {students}')
words = ['I', 'a', 'boy.']
words.insert(1, 'am')
for word in words:
print('{} '.format(word), end='')
>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
I am a boy.
- 오름차순으로 정렬되어 있는 숫자들에 사용자가 입력한 정수를 추가하는 프로그램
(단, 추가 후에도 오름차순 정렬이 유지되어야 한다.)
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = int(input('숫자 입력 : '))
insertIdx = 0
for idx, number in enumerate(numbers):
if insertIdx == 0 and inputNumber < number:
insertIdx = idx
numbers.insert(insertIdx, inputNumber)
print(numbers)
>>
숫자 입력 : 4
[1, 3, 4, 6, 11, 45, 54, 62, 74, 85]
8. pop()
- pop() 함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.
pop(n) 인덱스 번호 n을 넣어 해당하는 인덱스의 아이템을 삭제할 수 있다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
students.pop()
print(f'students : {students}')
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
rValue = students.pop(3)
print(f'rValue : {rValue}')
>>
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students : ['홍길동', '박찬호', '이용규', '김지은', '강호동']
- 삭제한 아이템을 다른 변수에 할당할 수 있음.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
rValue = students.pop()
print(f'rValue : {rValue}')
>>
rValue : 강호동
playerScores = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScores : {}'.format(playerScores))
minScore = 0; maxScore = 0
minScoreIdx = 0; maxScoreIdx = 0
for idx, score in enumerate(playerScores):
if idx == 0 or minScore > score:
minScoreIdx = idx
minScore = score
print('minScore : {}, minScoreIdx : {}'.format(minScore, minScoreIdx))
playerScores.pop(minScoreIdx)
for idx, score in enumerate(playerScores):
if maxScore < score:
maxScoreIdx = idx
maxScore = score
print('maxScore : {}, maxScoreIdx : {}'.format(maxScore, maxScoreIdx))
playerScores.pop(maxScoreIdx)
print('playerScores : {}'.format(playerScores))
playerScores : [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
minScore : 8.8, minScoreIdx : 4
maxScore : 9.8, maxScoreIdx : 3
playerScores : [9.5, 8.9, 9.2, 9.0]
9. remove()
- remove() 함수를 이용하면 특정 아이템을 삭제할 수 있다.
특정 아이템을 직접 입력
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print(students)
while '강호동' in students:
students.remove('강호동')
print(students)
>>
['홍길동', '박찬호', '이용규', '박승철', '김지은']
10. extend()
- extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.
덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.(확장의 개념은 아님. 원래 리스트는 그대로 있고 새로운 리스트가 생김)
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
print(f'group1 : {group1}')
print(f'group2 : {group2}')
group1.extend(group2)
print(f'group1 : {group1}')
print(f'group2 : {group2}')
print('-' * 70)
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
print(f'group1 : {group1}')
print(f'group2 : {group2}')
result = group1 + group2
print(f'result : {result}')
print(f'group1 : {group1}')
print(f'group2 : {group2}')
>>
group1 : ['홍길동', '박찬호', '이용규']
group2 : ['강호동', '박승철', '김지은']
group1 : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
group2 : ['강호동', '박승철', '김지은']
----------------------------------------------------------------------
group1 : ['홍길동', '박찬호', '이용규']
group2 : ['강호동', '박승철', '김지은']
result : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
group1 : ['홍길동', '박찬호', '이용규']
group2 : ['강호동', '박승철', '김지은']
- 나와 친구가 좋아하는 번호를 합치되 번호가 중복되지 않게하는 프로그램
myFavoriteNumbers = [1, 3, 5, 6, 7]
friendFavoriteNumbers = [2, 3, 5, 8, 10]
addList = myFavoriteNumbers + friendFavoriteNumbers
print(f'addList : {addList}')
result = []
for n in addList:
if n not in result:
result.append(n)
print(f'result : {result}')
>>
addList : [1, 3, 5, 6, 7, 2, 3, 5, 8, 10]
result : [1, 3, 5, 6, 7, 2, 8, 10]
11. sort()
- sort() 함수를 이용하면 아이템을 정렬할 수 있다.(오름차순)
sort(reverse = True) (내림차순)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students.sort()
print(f'students : {students}')
students.sort(reverse = True)
print(f'students : {students}')
students.sort(reverse = False)
print(f'students : {students}')
>>
students : ['강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동']
students : ['홍길동', '이용규', '박찬호', '박승철', '김지은', '강호동']
students : ['강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동']
12. reverse()
- reverse() 함수를 이용하면 아이템 순서를 뒤집을 수 있다.
numbers = [2, 3.14, 9, 12, 3, 1]
numbers.reverse()
print(f'numbers : {numbers}')
>>
numbers : [1, 3, 12, 9, 3.14, 2]
13. 리스트 슬라이싱
- [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
n은 포함 m은 앞까지 ex. [2, 4] --> 2 <= n < 4
문자열도 슬라이싱 가능하다.
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print(f'numbers : {numbers}')
print(f'numbers : {numbers[2:4]}')
print(f'numbers : {numbers[:4]}')
print(f'numbers : {numbers[2:]}')
print(f'numbers : {numbers[2:-2]}')
print(f'numbers : {numbers[-5:-2]}')
print(f'numbers : {numbers[2:-2:2]}')
>>
numbers : [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers : [0.12, 1]
numbers : [2, 50, 0.12, 1]
numbers : [0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers : [0.12, 1, 9, 7, 17, 35]
numbers : [7, 17, 35]
numbers : [0.12, 9, 17]
- 슬라이싱을 이용해서 아이템을 변경(대체)할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students[1:4] = ['park chanho', 'lee yonggyu', 'gang hodong']
print(f'students : {students}')
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students[1:4] = ['park chanho', 'lee yonggyu']
print(f'students : {students}')
>>
students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
students : ['홍길동', 'park chanho', 'lee yonggyu', '박승철', '김지은']
- slice() 함수를 이용해서 아이템을 슬라이싱 할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(f'students : {students}')
print(f'students : {students[slice(2, 4)]}')
print(f'students : {students[slice(4)]}')
print(f'students : {students[slice(2, len(students))]}')
>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students : ['이용규', '강호동']
students : ['홍길동', '박찬호', '이용규', '강호동']
students : ['이용규', '강호동', '박승철', '김지은']
14. 그 외의 기능
students = ['홍길동', '박찬호', '이용규']
studentsMul = students * 2
print('studentsMul : {}'.format(studentsMul))
>>
studentsMul : ['홍길동', '박찬호', '이용규', '홍길동', '박찬호', '이용규']
- index(item) 함수를 이용하면 item의 인덱스를 알아낼 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '강호동', '박승철', '김지은']
searchIdx = students.index('강호동')
print('searchIdx : {}'.format(searchIdx))
searchIdx = students.index('강호동',2, 6)
print('searchIdx : {}'.format(searchIdx))
>>
searchIdx : 1
searchIdx : 4
- count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '강호동', '박승철', '김지은']
searchCnt = students.count('강호동')
print('searchCnt : {}'.format(searchCnt))
searchCnt = students.count('김아무개')
print('searchCnt : {}'.format(searchCnt))
>>
searchCnt : 2
searchCnt : 0
- del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '강호동', '박승철', '김지은']
del students[1]
print('students : {}'.format(students))
del students[1:4]
print('students : {}'.format(students))
>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students : ['홍길동', '박승철', '김지은']