할당과 복사는 비슷한 것 같지만 큰 차이점이 있다.
리스트 a를 b에 할당했더니, a와 b가 같은 리스트가 되어버렸다. a를 바꾸면 b가 바뀌고, b를 바꾸면 a가 바뀌고, 신기방기.
>>> a = [1, 2, 3, 4, 5]
>>> b = a
>>> a is b
True
>>> b[2] = 100
>>> a
[1, 2, 100, 4, 5] # b를 변경했는데 a도 바뀜
>>> b
[1, 2, 100, 4, 5]
리스트 a와 b를 완전히 두 개로 만들려면 copy 메서드로 모든 요소를 복사해야 한다.
>>> a = [1, 2, 3, 4, 5]
>>> b = a.copy()
>>>
>>> a is b # a와 b는 다른 객체
False
>>> a == b # 요소는 같으므로 ==로 비교하면 True
True
>>> b[2] = 100
>>> a
[1, 2, 3, 4, 5] # a와 b는 다른 객체이기때문에 b를 바꿔도 영향을 받지 않는다.
>>> b
[1, 2, 100, 4, 5]
for 변수 in 리스트:
반복할 코드
a = [1, 2, 3, 4, 5]
for i in a:
print(i)
- for 인덱스, 요소 in enumerate(리스트):
enumerate: mention (a number of things) one by one, 일일이헤아리다, 열거하다, 세다
a = [100, 200, 300, 400, 500]
for index, value in enumerate(a):
print(index, value)
0 100
1 200
2 300
3 400
4 500
인덱스를 0이 아닌 1부터 출력하고 싶으면, index + 1을 출력하면 된다.
a = [100, 200, 300, 400, 500]
for index, value in enumerate(a):
print(index + 1, value)
1 100
2 200
3 300
4 400
5 500
좀 더 파이썬 다운 방법으로는 enumerate에 start를 지정해주는 것이다.
a = [100, 200, 300, 400, 500]
for index, value in enumerate(a, start=1): # enumerate(a, 1)과 같이 줄여 쓸 수도 있다.
print(index, value)
1 100
2 200
3 300
4 400
5 500
인덱스로 요소를 출력하는 방법도 있다. (다들 다 알 필요가 없다, 이러는데 뭔가 다 알아야할 것만 같다...)
a = [100, 200, 300, 400, 500]
for i in range(len(a)):
print(a[i])
100
200
300
400
500
a = [100, 200, 300, 400, 500]
i = 0
while i < len(a): # i가 리스트의 길이(요소 개수) 직전까지만 반복한다
print(a[i])
i += 1
100
200
300
400
500
for로 리스트의 요소를 모두 반복하면서 i가 smallest보다 작으면 smallest에 i를 할당한다. 즉, 숫자를 계속 비교하면서 숫자가 작으면 smallest를 바꾸는 방식.
>>> a = [34, 132, 12, 593, 1255]
>>>
>>> smallest = a[0]
>>> for i in a:
if i < smallest:
smallest = i
>>> smallest
12
가장 큰 수는 부등호를 반대로 만들면 된다.
>>> a = [34, 132, 12, 593, 1255]
>>> largest = a[0]
>>> for i in a:
if i > largest:
largest = i
>>> largest
1255
개발자는 게을러서 더 간단한 방법을 찾는다. 리스트를 정렬하는 sort 메서드를 사용해보자
>>> a = [34, 132, 12, 593, 1255]
>>> a.sort() # 오름차순으로 정렬하면 첫 번째 요소가 가장 작은 수
>>> a[0]
12
>>> a.sort(reverse=True) # 내림차순으로 정렬하면 첫 번째 요소가 가장 큰 수
>>> a[0]
1255
더 게을러져보자.
>>> a = [34, 132, 12, 593, 1255]
>>> min(a)
12
>>> max(a)
1255
>>> a = [10, 20, 30, 40]
>>> x = 0
>>> for i in a:
x += i # 리스트의 요소를 모두 반복하면서 요소를 x에 계속 더해준다)
>>> x
100
번거롭구나
>>> a = [10, 20, 30, 40]
>>> sum(a)
100
min, max, sum에는 리스트뿐만 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다. 반복 가능한 객체는 리스트, 튜플, 딕셔너리, 세트, range 등 여러 가지가 있다.