이차원 리스트(=배열)와 다차원 배열
#늘 있는 일이지만 리스트에서 쓰는 것은 같은 sequence객체에서 "대부분"사용이 가능하다.
이차원 배열 출력
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> for x, y in a: # 리스트의 가로 한 줄(안쪽 리스트)에서 값 두 개를 꺼냄 x, y = a[i]
... print(x, y)
...
10 20
30 40
50 60
a = [[10, 20], [30, 40], [50, 60]]
i = 0
while i < len(a): # 가로 크기
j = 0
while j < len(a[i]): # 세로 크기
print(a[i][j], end=' ')
j += 1 # 가로 인덱스를 1 증가시킴
print()
i += 1
리스트 조작
메소드(=메소드 함수)란: 객체에 속한 함수
- 요소 추가
>>> a = [10, 20, 30]
>>> a.append(500)
리스트 안에 리스트를 넣을 수도 있다.
- 리스트 연결하기 (여러 요소를 추가하고 싶을 때. append(arr)를 하면 배열 자체가 요소로 들어간다.
>>> a = [10, 20, 30]
>>> a.extend([500, 600])
>>> a = [10, 20, 30]
>>> b = [1, 2, 3]
>>> c = a + b
>>> c
[10, 20, 30, 1, 2, 3]
- 리스트 반복
>>> a = [10, 20, 30]
>>> b = a * 3
>>> b
[10, 20, 30, 10, 20, 30, 10, 20, 30]
- 특정 인덱스에 요소 추가
>>> a = [10, 20, 30]
#인덱스 2에 500을 추가, 나머지는 밀어냄.
>>> a.insert(2, 500)
- insert(0, 요소): 리스트의 맨 처음에 요소를 추가
- insert(len(리스트), 요소): 리스트 끝에 요소를 추가
- 마지막 요소 삭제
.pop은 pop한 요소를 반환.
>>> a = [10, 20, 30]
>>> a.pop()
- 특정 요소 삭제.
>>> a = [10, 20, 30]
>>> del a[1]
- 특정 값 삭제
>>> a = [10, 20, 30]
>>> a.remove(20)
만약 삭제하려는 것이 여러개이면 어떻게 될까?
- 특정 값의 개수
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.count(20)
- 순서 뒤집기
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
- 요소 정렬
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
sorted()로 정렬된 리스트를 사용할 수도 있다. sort는 메소드 함수, sorted는 내장함수
모든 요소 삭제
>>> a = [10, 20, 30]
>>> a.clear()
>>> a = [10, 20, 30]
>>> del a[:]
슬라이스를 이용한 리스트(이때는 리스트의 범위를 벗어난 인덱스를 사용할 수 있다.)
여러 요소를 연결하는데 쓸 수도 있다.
>>> a = [10, 20, 30]
>>> a[len(a):] = [500]
>>> a = [10, 20, 30]
>>> a[len(a):] = [500, 600]
리스트 비어있는지 확인
if not seq: # 리스트가 비어 있으면 True
if seq: # 리스트에 내용이 있으면 True
리스트의 할당과 복사
>>> a = [0, 0, 0, 0, 0]
>>> b = a
>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
a와 b는 같은 곳을 가르킨다. 참조와 복사
얕은 복사 = 참조
깊은 복사 = duplicate, 진짜 우리가 생각하는 복사.
위는 메모리상에서 참조를 한 것이다.
위 코드처럼 할당을 하면 얕은 복사가 된다.
이제 깊은 복사로 만들어주자.
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
>>> b[2] = 99
>>> a
[0, 0, 0, 0, 0]
>>> b
[0, 0, 99, 0, 0]
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
>>> a is b# 다른 객체
False
>>> a == b# 같은 값을 가짐.
True
리스트의 연산이 가능하다
리스트를 인쇄해보자.
>>> a = [38, 21, 53, 62, 19]
>>> for i in a:
... print(i)
join 메소드
"".join(배열) 메소드
리스트를 문자열로 바꿔준다.
.split 문자열을 리스트로 바꿔준다.
리스트 표현식 - 리스트 컴프리헨션
>>> 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까지 숫자를 생성하여 리스트 생성
>>> c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
>>> a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
>>> a
[0, 2, 4, 6, 8]
구구단.
>>> a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> 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]
처리순서는 뒤부터.
map함수. 모든 요소에 특정 조건 지정.
>>> a = map(int, input().split())
10 20 (입력)
>>> a
<map object at 0x03DFB0D0>
>>> list(a)
[10, 20]
실수를 정수로 변환.
>>> 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]
def square(x):
return x**2
number = [1,2,3]
squared_number = map(square, number)
print(list(squared_number)#왜 List를 써야할까?
map은 반복 가능한 객체(iterator)을 반환함. 메모리 주소가 출력. 값을 보기 위해서는 변환 필요
iterable vs iterator
Range, 문자열, 리스트 등은 iterable 객체.
map, zip, filter,enumerate들은 Iterator 내장 함수.
#filter은 map과 사용법이 같으나, 함수의 결과의 참 거짓에 따라 요소 포함 결정.
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
def is_even(n):
return True if n % 2 == 0 else False
for value in target:
if is_even(value):
result.append(value)
print(result) # 출력결과 : [2, 4, 6, 8, 10]
내장함수/외장함수/커스텀(사용자 정의) 함수
'파이썬 스터디' 카테고리의 다른 글
파이썬 메소드 (0) | 2024.11.02 |
---|---|
세트와 딕셔너리 (6) | 2024.09.08 |
강의할 것 (0) | 2024.08.14 |
파이썬 헷갈리는 것 (0) | 2024.06.03 |
3. 파이썬 기본 문법 - 시퀀스 자료형 배열(list), 튜플, 문자열 (7) | 2024.06.03 |