append: 요소 하나를 추가, 리스트도 추가할 수 있다.
>>> a = [10, 20, 30]
>>> a.append(500)
# 실행 결과
a = [10, 20, 30]
>>> a = [10, 20, 30]
>>> a.append([500, 600])
extend: 리스트를 연결하여 확장
>>> a = [10, 20, 30]
>>> a.extend([500, 600])
>>> a
[10, 20, 30, 500, 600]
insert: 특정 인덱스에 요소 추가
>>> a = [10, 20, 30]
>>> a.insert(2, 500)
>>> a
[10, 20, 500, 30]
insert(0, 요소): 리스트의 맨 처음에 요소를 추가
insert(len(리스트), 요소): 리스트 끝에 요소를 추가
>>> a = [10, 20, 30]
>>> a.insert(1, [500, 600]) # 요소로 리스트를 넣을 수 있다.
>>> a
[10, [500, 600], 20, 30]
>>> a = [10, 20, 30]
>>> a.insert(len(a), 500)
>>> a
[10, 20, 30, 500]
>>> a = [10, 20, 30]
>>> a[1:1] = [500, 600] # 시작 인덱스와 끝 인덱스를 같게 지정하면
# 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있다.
>>> a
[10, 500, 600, 20, 30]
>>> a = [10, 20, 30]
>>> a.pop(1)
20
>>> a
[10, 30]
pop대신 del사용 가능>>> a = [10, 20, 30]
>>> del a[1]
>>> a
[10, 30]
>>> a = [10, 20, 30, 20]
>>> a.remove(20)
>>> a
[10, 30, 20]
스택 : append(), pop() 늦게 들어온 요소가 먼저 나감 FIFO
큐 : append(), pop(0) or insert(0, 요소), pop() 넣는 곳 빼는 곳 따로있음
파이썬에서 스택은 리스트를 그대로 활용해도 되지만, 큐는 좀 더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)이라는 자료형을 제공한다. 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조다.
index(값) 사용
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.index(20)
1
count(값) 사용
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.count(20)
2
reverse() 사용
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
>>> a
[40, 20, 15, 30, 20, 10]
sort()사용
sort() 또는 sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
>>> a
[10, 15, 20, 20, 30, 40]
sort메서드와 sorted 함수. 둘 다 정렬을 해주는 함수지만 sort는 메서드를 사용한 리스트를 변경하고, sorted 함수는 정렬된 새 리스트를 생성한다.
>> a = [10, 20, 30, 15, 20, 40] >> a.sort() # a의 내용을 변경하여 정렬 >> a [10, 15, 20, 20, 30, 40] >> b = [10, 20, 30, 15, 20, 40] >> sorted(b) # 정렬된 새 리스트를 생성 [10, 15, 20, 20, 30, 40]
clear() 사용
```
>>> a = [10, 20, 30]
>>> a.clear()
>>> a
[]
```
del list[:]와 같이 시작, 끝 인덱스를 생략해 사용 가능
```
>>> a = [10, 20, 30]
>>> del a[:]
>>> a
[]
```
a[len(a):]는 시작 인덱스를 len(a) -> 3 로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태이다. 리스트 끝부터 시작하겠다는 의미가 된다.
```
>>> a = [10, 20, 30]
>>> a[len(a):] = [500]
>>> a
[10, 20, 30, 500]
# a. append(500)과 같다
```
리스트를 할당하면 a.extend([500,600])과 같다.
```
>>> a = [10, 20, 30]
>>> a[len(a):] = [500, 600]
>>> a
[10, 20, 30, 500, 600]
```
리스트가 비어있는지 확인하기 -> len함수로 리스트 길이를 구해 if문으로 판단
if not seq: # 리스트가 비어 있으면 True if seq: # 리스트에 내용이 있으면 True
리스트가 비어있는데 마지막 인덱스 seq[-1]를 가져오면 에러남
할당 : 같은 객체를 참조한다.
a와 b는 한 쪽만 변경해도 나머지도 동일하게 변경된다. a is b = True
>>> a = [0, 0, 0, 0, 0]
>>> b = a
복사 : 값은 같아도 별개의 객체이다.
a와 b는 한 쪽만 변경하면 나머지는 변경되지 않는다. a is b = False, a == b True
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
for 변수 in 리스트:
반복할 코드
enumerate로 인덱스와 요소를 함께 출력하기
>> a = [38, 21, 53, 62, 19] >> for index, value in enumerate(a): # enumerate(리스트, start=숫자):로 인덱스를 1부터 출력하게 지정 가능 ... print(index, value) ... 0 38 1 21 2 53 3 62 4 19
while문으로도 출력 가능하다.
while i < len(a):
print(a[i])
i += 1
>>> a = [38, 21, 53, 62, 19]
>>> smallest = a[0]
>>> for i in a:
... if i < smallest: # 가장 큰 수는 부등호만 바꿔주면 된다.
... smallest = i
...
>>> smallest
19
>>> a = [38, 21, 53, 62, 19]
>>> a.sort()
>>> a[0]
19
>>> a.sort(reverse=True) #역순으로 정렬해 가장 큰 수 구하기
>>> a[0]
62
>>> a = [38, 21, 53, 62, 19]
>>> min(a)
19
>>> max(a)
62
>>> a = [10, 10, 10, 10, 10]
>>> x = 0
>>> for i in a:
... x += i
...
>>> x
50
>>> a = [10, 10, 10, 10, 10]
>>> sum(a)
50
min, max, sum에는 리스트뿐만 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다. 반복 가능한 객체는 리스트, 튜플, 딕셔너리, 세트, range 등 여러 가지가 있다.
식으로 지정해서 생성된 것을 리스트로 잡아두는 것
[식 for 변수 in 리스트]
list(식 for 변수 in 리스트)
>>> a = [i for i in range(10)] # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = list(i for i in range(10)) # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
i 값에 연산, if 조건문, 다중 for문 등의 사용이 가능하다.
>> b = [i + 5 for i in range(10) if i % 2 == 1] # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성 >> b [6, 8, 10, 12, 14]
처리 순서는 뒤에서 앞이다.
map은 리스트의 요소를 지정된 함수로 처리해주는 함수다. map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.
list(map(함수, 리스트))
tuple(map(함수, 튜플))
실수가 저장된 리스트의 모든 요소를 정수로 변환 for문과 map 사용
>> a = [1.2, 2.5, 3.7, 4.6] >> for i in range(len(a)): ... a[i] = int(a[i]) >> a [1, 2, 3, 4]
>> a = [1.2, 2.5, 3.7, 4.6] >> a = list(map(int, a)) >> a [1, 2, 3, 4]
map에는 리스트뿐만 아니라 모든 반복 가능한 객체를 넣을 수 있다.
>> a = list(map(str, range(10))) >> a ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
input().split()의 값은 리스트라서 map을 사용할 수 있다.
>> a = input().split() 10 20 (입력) >> a ['10', '20'] # 리스트!!
>> a = map(int, input().split()) 10 20 (입력) >> a <map object at 0x03DFB0D0> # map객체 상태로는 안의 값을 볼 수 없다. >> list(a) # list를 통해 출력 [10, 20]
index(값)으로 인덱스 구하기
count(값)으로 특정 값 개수 구하기
for문으로 요소 출력
튜플 표현식(comprehension)사용
튜플에 map 사용하기
min(튜플), map(튜플), sum(튜플) 이용하기
모두 리스트와 같다. 다만 튜플은 내용 변경이 불가능하다는 점 유의
두 개의 정수를 입력받아 첫 번째 정수부터 두 번째 정수까지를 지수로 하는 2의 거듭제곱 리스트를 출력. 단, 리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력. 출력 결과는 리스트이다.
a,b = map(int,input().split())
x = [2**i for i in range(a,b+1)]
x.pop(1)
x.pop(-2)
print(x)
입력
1 10
결과
[2, 8, 16, 32, 64, 128, 256, 1024]