-리스트기능: 요소추가, 삭제, 조회, for문과 결합 등
-리스트에 요소 추가하는 method:
1)append:요소 하나를 추가
2)extend:리스트를 연결하여 확장
3)insert: 특정 인덱스에 요소 하나 추가
append 예시)
a = [1,2,3]
a.append(4)
print(a)
[1, 2, 3, 4]
-append로 리스트 안에 리스트를 추가할 수 있다.(추가된 리스트는 내부요소와 상관없이 길이 1로 취급)
예시)
a = [1,2,3]
a.append([4,5])
print(a)
[1, 2, 3, [4, 5]]
len(a)
4
-extend예시)
-extend는 리스트 끝에 다른 리스트를 연결하여 리스트를 확장한다.
a = [1,2,3]
a.extend([4,5])
print(a)
[1, 2, 3, 4, 5]
len(a)
5
-insert 예시)
a = [1,2,3]
a.insert(2,7)
print(a)
[1, 2, 7, 3]
-insert 추가 문법
1) insert(0,요소): 리스트 맨 처음에 요소 추가
2) insert(len(리스트),요소): 리스트 맨끝에 요소추가
-insert는 요소 하나를 추가하므로 insert에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어간다
예시
a = [1,2,3]
a.insert(1,[6,7])
print(a)
[1, [6, 7], 2, 3]
pop: 마지막 요소 또는 특정 인덱스의 요소 삭제
remove: 특정 값을 찾아서 삭제
pop뒤에 ()만 지정하면 맨 뒤의 요소가 사라진다.
예시)
a = [1,2,3]
a.pop()
3
print(a)
[1, 2]
pop뒤의 ()안에 인덱스 지정시 해당 요소 사라진다
예시)
a = [1,2,3]
a.pop(1)
2
print(a)
[1, 3]
-pop 대신 del을 사용해도 무방하다.
예시
a = [1,2,3]
del a[1]
print(a)
[1, 3]
-remove는 리스트 내의 특정 값을 찾아 삭제한다.
-값 중복시 처음 찾은 값을 삭제한다.
예시
a= [1,2,3,1]
a.remove(1)
print(a)
[2, 3, 1]
-특정값의 인덱스 구할 수 있다.
-값이 여러개일 경우 처음 찾은 인덱스를 출력
예시
a = [1,2,3,1]
a.index(1)
0
a = [1,2,3,1]
a.count(1)
2
a = [5,4,3,2,1]
a.reverse()
print(a)
[1, 2, 3, 4, 5]
문법: sort() 또는 sort(reverse=False): 올름차순
문법: sort(reverse=True): 내림차순
예시1)
a = [4, 2, 6, 1, 3]
a.sort()
print(a)
[1, 2, 3, 4, 6]
예시2)
a = [4, 2, 6, 1, 3]
a.sort(reverse=True)
print(a)
[6, 4, 3, 2, 1]
-clear()는 리스트 모든 요소 삭제
-del a[:]로 시작, 끝 인덱스 생략하여 리스트 모든 요소 제거 가능
예시1)
a = [4, 2, 6, 1, 3]
a.clear()
print(a)
[]
예시2)
a = [4, 2, 6, 1, 3]
del a[0:2]
print(a)
[6, 1, 3]
-리스트 끝에 값이 한 개 들어있는 리스트 추가하기
a = [1,2,3]
a[len(a):] = [4]
print(a)
[1, 2, 3, 4]
위의 코드는 a.append(4)와 같다
-리스트 끝에 요소가 여러개인 리스트 추가하기
a = [1,2,3]
a[len(a):] = [4,5]
print(a)
[1, 2, 3, 4,5]
위의 코드는 a.extend([4,5]) 와 같다.
a = [1,2,3,4] #a를 정의
b = a #b를 a에 할당
a is b #a 와 b가 같냐고 물으면
True # 참
b[2] = 9 #b의 인덱스 2를 수정하면
print(a)
[1, 2, 9, 4] #a와 b는 같기에 a도 수정됨
a = [1,2,3,4] #a 정의
b = a.copy() #a를 b에 복사
a is b #a와 b가 같냐 물으면
False #false
a == b #a와 b의 '요소'가 같냐 물으면
True #True
b[2] = 9 #b의 인덱스 2를 수정해도
print(a) #a엔 변화가 없다.
[1, 2, 3, 4]
print(b)
[1, 2, 9, 4]
예시1)
a = [1,2,3,4]
for i in a:
print(i)
1
2
3
4
예시2)
for i in [1,2,3,4]:
print(i)
1
2
3
4
문법: for 인덱스, 요소 in enumerate(리스트):
예시)
a = [1,2,3,4]
for index, value in enumerate(a):
print(index, value)
결과)
0 1
1 2
2 3
3 4
물론 아래처럼 인덱스, 요소 자리는 임의의 변수를 지정하면 된다. 이름은 freestyle
a = [1,2,3,4]
for hi, bye in enumerate(a):
print(hi, bye)
결과
0 1
1 2
2 3
3 4
아래처럼 인덱스를 1부터 출력할 수도 있다.
for hi, bye in enumerate(a):
print(hi + 1, bye)
결과
1 1
2 2
3 3
4 4
인덱스를 1부터 출력하는 좀 더 파이썬스러운 방법
-문법1: for index, value in enumerate(요소, start=1):
-문법2: for index, value in enumerate(요소, 1(시작하고자하는인덱스숫자))
예시)
a = [5,6,7,8]
for i, v in enumerate(a, start=1):
print(i, v)
결과:
1 5
2 6
3 7
4 8
a = [5,6,7,8]
for i, v in enumerate(a, 1):
print(i, v)
결과:
1 5
2 6
3 7
4 8
a = [5,6,7,8]
i = 0
while i < len(a):
print(a[i])
i += 1
결과
5
6
7
8
-가장 작은 수 구하기 예시1
a = [60, 50, 70, 90, 10]
smallest = a[0]
for i in a:
if i < smallest:
smallest = i
print(smallest)
10
-가장 큰 수 구하기 예시2
a = [34, 62, 79, 12, 0]
largest = a[0]
for i in a:
if i > largest:
largest = i
print(largest)
79
-위 방법 말고 sort를 이용해 구하는 방법도 있다.
예시3) sort
a = [34, 62, 79, 12, 0]
a.sort()
print(a[0])
0
예시4) sort
a = [34, 62, 79, 12, 0]
a.sort(reverse = True)
print(a[0])
79
-max, min을 사용해 최대, 최수값을 구할 수도 있다.
예시)
a = [34, 62, 79, 12, 0]
min(a)
0
max(a)
79
a = [34, 62, 79, 12, 0]
x = 0
for i in a:
x += i
print(x)
187
a = [34, 62, 79, 12, 0]
sum(a)
187
***min, max, sum은 리스트 뿐 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다.
-파이썬 리스트가 특이한 점은 리스트 안에 for, if를 사용할 수 있다는 것.
-리스트 안에 식, for, if등 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다.
-책이나 인터넷에서도 리스트 내포, 리스트 내장, 리스트 축약, 리스트 해석 등으로 씀.
-컴프리헨션: 능력, 이해력, 시험 등도 잇지만 무언가를 담아둔다는 뜻이 있다.
-식으로 지정해 생성된 것을 리스트로 잡아두는 것을 list comprehension이라고 함.
-문법1: [식 for 변수 in 리스트]
-문법2: list(식 for 변수 in 리스트)
문법1예시)
a = [i for i in range(10)]
print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
문법2예시)
b = list(i for i in range(10))
print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-i를 연산한 값을 출력할 수도 있다.
예)
a = [i * 2 for i in range(10)]
print(a)
결과
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
문법1: [식 for 변수 in 리스트 if 조건식]
문법2: list(식 for 변수 in 리스트 if 조건식)
예시)
a = [i for i in range(10) if i % 2 ==0]
print(a)
[0, 2, 4, 6, 8]
a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> print(a)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
위 코드를 아래처럼 두 줄로 작성해도 된다.
a = list(i * j for j in range(2,10)
for i in range(1,10))
-리스트 표현식에서 for가 여러 개일 때 처리 순서는 뒤에서 앞으로 순서
-문법: list(map(함수, 리스트))
-문법: tuple(map(함수, 튜플))
예시)
a = [1.2, 2.2, 3.3, 4.4]
for i in range(len(a)):
a[i] = int(a[i])
print(a)
[1, 2, 3, 4]
-위처럼 매번 for 반복문 하면 번거롭다->map 편리
예시)
a = [1.2, 2.2, 3.3, 4.4]
a = list(map(int, a))
print(a)
[1, 2, 3, 4]
-range, map으로 숫자->문자열 만들기
예시)
a = list(map(str, range(10)))
print(a)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
다음처럼 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.
a = input().split()
10 20
print(a)
['10', '20'] #문자열 요소 10,20을 가진 리스트
이제 map을 사용해 정수로 전환하자.
a = list(map(int, input().split()))
10 20
print(a)
[10, 20]
위 리스트 [10, 20]을 변수 두 개에 저장하면 지금까지 사용한 a, b= map(int, input().split()과 같은 동작이 된다.
a , b = [10, 20]
print(a)
10
print(b)
20
-사실 map이 반환하는 맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다.
-a, b = map(int,input().split()처럼 list를 생략한 것임.
-a, b =map(int, input().split())을 풀어쓰면 아래와 같은 코드가 된다.
x = input().split()
m = map(int, x)
a, b = m
-튜플은 리스트와달리 내용 변경 불가(immutable)
-내용 변경하는 append같은 메서드는 사용 불가하고, 요소의 정보를 구하는 메서드만 사용 가능.
-같은 값의 중복 시 맨 앞에 위치한 값이 구해진다.
예)
a = (1, 2, 3, 4, 1)
a.index(1)
0
a = (1, 2, 3, 4, 1)
a.count(1)
2
a = (1, 2, 3, 4, 1)
for i in a:
print(i, end=" ")
결과
1 2 3 4 1
문법: tuple(식 for 변수 in 리스트 if 조건식)
예시
a= tuple(i for i in range(10) if i % 2==0)
print(a)
(0, 2, 4, 6, 8)
-참고로 괄호 안에 표현식을 넣으면 튜플이 아니라 제너레이터 표현식이 됨(아직 안배운 내용, 나중에)
a = (1.1, 2.2, 3.3, 4.4)
a = tuple(map(int, a))
print(a)
(1, 2, 3, 4)
a = (1.1, 2.2, 3.3, 4.4)
min(a)
1.1
max(a)
4.4
sum(a)
11.0