본문 바로가기
DEV/파이썬 이론

파이썬 코딩 :: 파이썬 list 자료형 문법(수정, 연산 메소드)

by 올커 2022. 8. 15.

파이썬 리스트 자료형, 연산자 메서드


1. 리스트(List) 자료형

  숫자나 문자 모음 또는 리스트 등의 자료형의 모음을 표현할 때 사용

  아래와 같은 형식으로 사용하며, 각 요소에는 숫자, 문자, 리스트 등의 자료형이 포함될 수 있다.

리스트명 = [요소1, 요소2, 요소3, ...]

 

2. 리스트(List) 인덱싱(Indexing)

  리스트의 각 요소에 인덱스를 붙여 사용할 수 있다.

  인덱스는 맨 좌측부터 0, 1, 2, 3, .. 순으로, 맨 우측부터 -1, -2, -3, ... 순으로 채번된다.

a = [1, 2, 3, ['a', 'b', 'c']


>>> a[0]
1

>>> a[2]
3

>>> a[3]
['a', 'b', 'c']

>>> a[-1]
['a', 'b', 'c']

>>> a[3][0]
'a'

>>> a[3][2]
'c'

>>> a[3][-2]
'b'

 

3. 리스트 슬라이싱(Slicing)

  리스트 슬라이싱 : 리스트의 요소를 일부만 추출하는 것

a = [1, 2, 3, 4, 5]

# 리스트 슬라이싱
b = a[:2]
b = [1, 2]

c = a[2:]
c = [3, 4, 5]

d = a[2:4]
d = [3, 4]

 

4. 리스트의 연산

a = [1, 2]
b = [5, 6]

# 덧셈
a + b = [1, 2, 5, 6]

# 곱셈
a * 3 = [1, 2, 1, 2, 1, 2]

 

5. 리스트의 길이, 수정, 삭제, 추가

  - 리스트 길이 : len(리스트명)

a = [1, 2]

# 리스트 길이
len(a) = 2

 

  - 리스트 수정 : 리스트명[인덱스 번호] = 수정되는 요소

a = [1, 2]

# 리스트 수정
a[1] = 4
a = [1, 4]

 

  - 리스트 삭제 : del 리스트명[인덱스 번호]

a = [1, 4]

# 리스트 삭제
del a[1]
a = [1]

 

  - 리스트 추가 : 리스트명.append(변경하려는 요소)

a = [1]

# 리스트 추가
a.append(4)
a = [1, 4]

 

6. 리스트의 정렬, 뒤집기, 인덱스 반환

  - 리스트 정렬(1) : 리스트명.sort()      ▶ 리스트를 정렬한 값으로 변환

c = [7, 3, 1]

# 리스트 정렬
c.sort()
c = [1, 3, 7]

 

  - 리스트 정렬(2) : sorted(리스트명)    ▶ 리스트를 정렬한 모습으로 출력(리스트 값은 변화하지 않음)

c = [7, 3, 1]

# 리스트 정렬
sorted(c) = [1, 3, 7]
c = [7, 3, 1]

 

  - 리스트 뒤집기(1) : 리스트명.reverse()      ▶ 리스트를 정렬한 값으로 변환

c = [1, 3, 7]

# 리스트 뒤집기
c.reverse()
c = [7, 3, 1]

 

  - 리스트 뒤집기(2) : sorted(리스트명, reverse=True)    ▶ 리스트를 정렬한 모습으로 출력(리스트 값은 변화하지 않음)

c = [1, 3, 7]

# 리스트 뒤집기
sorted(c, reverse=True) = [7, 3, 1]
c = [1, 3, 7]

 

  - 리스트 뒤집기 (3) : 리스트명.sort(reverse=True)      ▶ 리스트를 정렬한 값으로 변환

c = [1, 3, 7]

# 리스트 뒤집기
c.sort(reverse=True)
c = [7, 3, 1]

 

  - 리스트 요소의 인덱스 반환 : 리스트명.index(요소값)

c = [7, 3, 1]

# 인덱스 반환
c.index(1) = 2

 

7. 리스트 요소 삽입, 제거, 빼내기

  - 리스트 요소 삽입 : 리스트명.insert(인덱스번호, 요소값)

a = [1, 4]


# 리스트에 요소 삽입
a.insert(1, 2)  # 인덱스 [1]에 2를 삽입
a = [1, 2, 4]

 

  - 리스트 요소 제거 : 리스트명.remove(인덱스번호)

c = [7, 3, 1]

# 리스트에 요소 제거 (리스트에서 첫번째로 나오는 괄호 내 요소 제거)
c.remove(3)
c = [7, 1]

 

  - 리스트 요소 빼내기 : 리스트명.insert(인덱스번호, 요소값)

a = [1, 2, 4]

# 리스트 요소 빼내기
>>> a.pop()    # 괄호 안에 아무것도 없으면 가장 마지막 요소 돌려주고, 그 요소는 삭제
4
a = [1, 2]

>>> a.pop(0)    # 괄호 내에 인덱스 사용 가능
1
a = [2]

 

8. 리스트 요소 갯수, 확장

  - 리스트 요소 갯수 : 리스트명.count(요소값)

d = [1, 1, 2, 3]

# 리스트 요소 갯수
d.count(1) = 2

 

  - 리스트 확장 : 리스트명.extend(요소값)

a = [2]

# 리스트 확장
a.extend([3, 4, 5])
a = [2, 3, 4, 5]

 

9. 예제(1) - 화씨 온도 리스트를 섭씨 온도로 변환

def fahrenheit_to_celsius(fahrenheit):
    celsius = ((fahrenheit - 32) * 5) / 9
    return celsius

temperature_list = [40, 15, 32, 64, -4, 11]

print("화씨 온도 리스트: {}".format(temperature_list))  # 화씨 온도 출력

## 섭씨온도 변환

i = 0
while i in range(len(temperature_list)):
    temperature_list[i] = round(fahrenheit_to_celsius(temperature_list[i]), 1)
    i += 1

print("섭씨 온도 리스트: {}".format(temperature_list))  # 섭씨 온도 출력

# 결과
화씨 온도 리스트: [40, 15, 32, 64, -4, 11]
섭씨 온도 리스트: [4.4, -9.4, 0.0, 17.8, -20.0, -11.7]

 

10. 리스트 주의할 점

  - 리스트에서는 변수와 달리 참조할 때 가명(Alias) 처리가 되는데 아래를 보면,

일반 변수의 경우 아래와 같다.

x = 10
y = x
y = 3
print(x)  >> 10
print(y)  >> 3

그러나 리스트의 경우는 다르다

x = [1, 2, 3, 4]
y = x
y[2] = 10
print(x)  >>  [1, 2, 10, 4]
print(y)  >>  [1, 2, 10, 4]

y는 x의 가명(Alias)으로 같은 주소를 참조하고 있기 때문이다.

그렇기 때문에 가명으로 사용하지 않으려면 리스트 함수'list(리스트명)'를 사용하여

별도의 리스트로 지정해주어야 한다.

x = [1, 2, 3, 4]
y = list(x)
y[2] = 10
print(x)  >>  [1, 2, 3, 4]
print(y)  >>  [1, 2, 10, 4]

 

11. 예제(2) - 1~1000까지의 숫자의 각 자리수 더한 값의 총 합 구하기

## 답안
def sum_digit(num):
    total = 0
    for i in range(len(str(num))):
        total += int(str(num)[i])
    return total

tot = 0
for i in range(1, 1001):
    tot += sum_digit(i)

print(tot)

# 결과
13501

 

11. 예제(3) - 주민등록번호 뒤의 4자리 * 표시로 변환

def mask_security_number(security_number):
    # security_number를 리스트로 변환
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list)-4, len(num_list)):
        num_list[i] = "*"

    # 리스트를 문자열로 복구
    total_str = ""
    for i in range(len(num_list)):
        total_str += num_list[i]

    return total_str

# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))

# 결과
880720-123****
880720123****
930124-765****
930124765****
761214-235****
761214235****

 

12. 예제(4) - 팰린드롬(Palindrome) 여부 검사

## 답안 (1)
def is_palindrome(word):
    word_list = list(word)
    if len(word_list) % 2 != 0:
        for i in range(len(word_list)//2):
            if word_list[i] == word_list[-(i+1)]:
                i += 1
            else:
                return False
        return True

## 답안 (2)
def is_palindrome(word):
    for left in range(len(word) // 2):
        # 한 쌍이라도 일치하지 않으면 바로 False를 리턴하고 함수를 끝냄
        right = len(word) - left - 1
        if word[left] != word[right]:
            return False

    # for문에서 나왔다면 모든 쌍이 일치
    return True


# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))

# 결과
True
False
True
True
False
반응형

댓글