본문 바로가기

파이썬 스터디

4. 파이썬 기본 문법 - 리스트 및 튜플 심화

이차원 리스트(=배열)와 다차원 배열

#늘 있는 일이지만 리스트에서 쓰는 것은 같은 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