> Unit.22 리스트와 튜플 응용하기 <
- 리스트에 요소 추가하기
: 리스트의 대표적인 기능이며 요소를 추가하는 메서드는 3가지가 있다.
1. append : 요소 하나를 추가. 리스트의 끝에 요소 하나를 추가하며 새로운 리스트가 생성되지 않는다. append(요소)는 리스트의 끝에 요소가 추가되는 것이지만 append(리스트)는 리스트의 끝에 리스트가 들어가 중첩 리스트가 된다.
>>> a = [10, 30]
>>> a.append([50, 70])
>>> a
[10, 30, [50, 70]]
>>> len(a)
4
#빈 리스트에 값 추가하기
>>> a = []
>>> a.append(10)
>>> a
[10]
2. extend : 리스트를 연결하여 확장. 리스트의 끝에 다른 리스트를 연결하여 확장하는 메서드이다. 따라서 리스트와 리스트를 연결한 모양이 된다.
3. insert : 특정 인덱스에 요소 추가. 위의 두 메서드는 리스트의 끝에 요소를 추가하는 방법이지만, insert는 원하는 위치에 요소를 추가할 수 있다. insert(인덱스, 요소)를 사용하여 특정 인덱스에 요소를 추가한다. 리스트의 맨 처음에 요소를 추가할 때는 insert(0, 요소)를, 리스트의 끝에 요소를 추가할 때는 insert(len(리스트), 요소)를 사용한다.
>>> a = [10, 20, 30]
>>> a.insert(2, 500)
>>> a
[10, 20, 500, 30]
>>> len(a)
4
- 리스트에서 요소 삭제하기
1. pop : pop은 리스트의 마지막 요소를 삭제한 후 삭제한 요소를 반환하는 메서드이다.
원하는 인덱스에 위치한 요소를 삭제하기 위해서는 pop에 인덱스를 지정하면 된다. pop 대신 del을 사용할 수도 있다.
#리스트 마지막 요소 삭제
>>> a = [10, 20, 30, 40, 50]
>>> a.pop()
50
>>> a
[10, 20, 30, 40]
#특정 인덱스의 요소 삭제
>>> a = [10, 20, 30]
>>> a.pop(1)
20
>>> a
[10, 30]
#del 사용
>>> a = [10, 20, 30]
>>> del a[1]
>>> a
[10, 30]
2. remove : 리스트에서 원하는 값을 찾아 삭제하기 위해서는 remove 메서드를 사용한다. remove(값)을 사용하면 리스트에서 해당 값을 찾아서 삭제한다. 한 리스트 안에 해당 값이 두개 이상이면, 가장 처음 찾은 인덱스의 값만 삭제한다.
>>> a = [10, 20, 30, 20]
>>> a.remove(20)
>>> a
[10, 30, 20] #20이 두개지만 가장 처음 찾은 인덱스인 [1]만 삭제함.
3. clear : 리스트의 모든 요소를 삭제할 때는 clear()를 사용한다. 모든 요소를 삭제하면 빈 리스트가 된다.
- 리스트에서 특정 값의 인덱스 구하기
리스트에서 특정 값의 인덱스를 구하는 메서드는 index(값)이다. 같은 값이 여러개 일 경우에는 가장 처음 찾은 인덱스만 구한다.
- 리스트 내 특정 값의 개수 구하기
count(값)은 리스트에서 특정 값이 몇개가 있는지 구하는 메서드이다.
- 리스트의 순서 바꾸기
1. reverse()는 리스트의 요소들의 순서를 반대로 뒤집는 메서드이다.
2. sort()는 리스트의 요소들을 오름차순으로 정렬하는 메서드이다. sort는 리스트 변경만 하지만 sorted 함수는 정렬된 새 리스트를 생성하는 차이점이 있다.
#요소 순서 반대로 뒤집기
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
>>> a
[40, 20, 15, 30, 20, 10]
#오름차순으로 정렬
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
>>> a
[10, 15, 20, 20, 30, 40]
- 리스트의 할당과 복사
>>> a = [0, 0, 0, 0, 0]
>>> b = a
위와 같이 리스트를 다른 변수에 할당을 하면 서로 다른 리스트가 되는 것이 아니라 이름만 다른 같은 객체가 된다. 때문에 b의 요소를 변경해도 a에도 반영이 된다.
서로 다른 객체로 만들기 위해서는 copy로 리스트의 모든 요소를 복사하여 새로운 객체를 만들어야 한다.
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
이렇게 copy를 하면 a와 b는 서로 다른 객체가 된다. 때문에 b에서 요소를 변경해도 a에는 반영이 되지 않는다.
- 리스트의 인덱스와 요소를 함께 출력하기
반복문으로 요소를 인덱스와 함께 출력하기 위해서는 enumerate를 사용해야한다.
or index, value in enumerate(a):와 같이 enumerate에 리스트를 넣으면 for 반복문에서 인덱스와 요소를 동시에 출력할 수 있다.
>>> a = [38, 21, 53, 62, 19]
>>> for index, value in enumerate(a):
... print(index, value)
...
0 38
1 21
2 53
3 62
4 19
- 리스트 표현식 사용하기
리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 리스트 컴프리헨션(list comprehension)을 사용하여 리스트를 표현할 수 있다. 리스트 컴프리헨션을 리스트 표현식이라고 하는데, 리스트 표현식을 사용하면 여러 줄의 코드를 한 줄로 줄일 수 있다.
리스트 표현식에 for가 여러 개일 때는 처리 순서가 뒤에서 앞으로 순임을 기억해 두는 것이 좋다.
#0부터 9까지 숫자를 생성하면서 값에 2를 곱하여 리스트 생성
>>> a = [i * 2 for i in range(10)]
>>> a
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
- 리스트 표현식에서 if 조건문 사용하기
if 조건문은 for 반복문 뒤에 지정을 하여 사용한다.
#0~9 숫자 중 홀수에 5를 더하여 리스트 생성
>>> b = [i + 5 for i in range(10) if i % 2 == 1]
>>> b
[6, 8, 10, 12, 14]
- 튜플 응용하기
튜플은 요소 변경이 불가능하기 때문에 리스트에서 사용했던 append, pop 같은 메서드를 사용할 수 없다.
따라서 요소의 정보를 구하는 메서드만 사용가능하다.
특정 값의 인덱스 구하기는 index, 특정 값의 개수 구하기는 count 메서드를 사용한다.
튜플 역시 리스트 표현식처럼 튜플 표현식을 사용할 수 있다.
>>> a = tuple(i for i in range(10) if i % 2 == 0)
>>> a
(0, 2, 4, 6, 8)
22.10 심사문제 : 2의 거듭제곱 리스트 생성하기
a,b = map(int, input().split())
List = [2 ** i for i in range(a,b + 1)]
del List[1]
del List[-2]
print(List)
https://github.com/YOOHYOJEONG/dojang_python