파이썬 리스트 자료형, 연산자 메서드
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
'DEV > 파이썬 이론' 카테고리의 다른 글
파이썬 코딩 :: 파이썬 튜플(tuple), 집합 (0) | 2022.09.01 |
---|---|
파이썬 코딩 :: 파이썬 딕셔너리(Dictionary) 문법, 예제 (0) | 2022.08.15 |
파이썬 코딩 :: 파이썬 인터프리터, pip 업그레이드 및 파이썬 패키지 설치 (0) | 2022.08.15 |
파이썬 코딩 :: 파이썬 반응형 모드와 파워쉘(PowerShell) (0) | 2022.08.15 |
파이썬 코딩 :: 파이썬 if 조건문 문법, 예제 (0) | 2022.08.15 |
댓글