TIL | 파이썬 기초 # 8
파이썬 데이터의 비밀
Aliasing
*파이썬 자료형
- mutable : dict, list
- immutable : tuple, str, int, bool, float
1.예시
x = 5
y = x
y = 3
print(x)
print(y)
5
3
2.예시
x = [2, 3, 5, 7, 11]
y = x # y와 x는 alias(가명)
y[2] = 4
print(x)
print(y)
[2, 3, 4, 7, 11]
[2, 3, 4, 7, 11] # 동일한 값 나온다!
3.예시
x = [2, 3, 5, 7, 11]
y = list(x) # 새로운 리스트 y를 만듬, x의 alias가 아님.
y[2] = 4
print(x)
print(y)
[2, 3, 5, 7, 11]
[2, 3, 4, 7, 11]
리스트와 문자열
리스트와 문자열은 구조적으로 비슷해서 많은 기능이 비슷하게 가능함.
<비슷한 점>
1.인덱싱
# 알파벳 리스트의 인덱싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0])
print(alphabets_list[1])
print(alphabets_list[4])
print(alphabets_list[-1])
# 알파벳 문자열의 인덱싱
alphabets_string = 'ABCDEFGHIJ'
print(alphabets_string[0])
print(alphabets_string[1])
print(alphabets_string[4])
print(alphabets_string[-1])
A
B
E
J
A
B
E
J
2.for 반복문
# 알파벳 리스트의 반복문
alphabets_list = ['A', 'S', 'H', 'H', 'S', 'A']
for alphabet in alphabets_list:
print(alphabet)
# 알파벳 문자열의 반복문
alphabets_string = 'ASHHSA'
for alphabet in alphabets_string:
print(alphabet)
A
S
H
H
S
A
A
S
H
H
S
A
3.슬라이싱(Slicing)
# 알파벳 리스트의 슬라이싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0:5])
print(alphabets_list[4:])
print(alphabets_list[:4])
# 알파벳 문자열의 슬라이싱
alphabets_string = 'ABCDEFGHIJ'
print(alphabets_string[0:5])
print(alphabets_string[4:])
print(alphabets_string[:4])
['A', 'B', 'C', 'D', 'E']
['E', 'F', 'G', 'H', 'I', 'J']
['A', 'B', 'C', 'D']
ABCDE
EFGHIJ
ABCD
4.덧셈 연산
# 리스트의 덧셈 연산
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = list1 + list2
print(list3)
# 문자열의 덧셈 연산
string1 = '1234'
string2 = '5678'
string3 = string1 + string2
print(string3)
[1, 2, 3, 4, 5, 6, 7, 8]
12345678
5.len 함수
# 리스트의 길이 재기
print(len(['H', 'E', 'L', 'L', 'O']))
# 문자열의 길이 재기
print(len("Hello, world!"))
5
13
<차이점>
Mutable 리스트 vs Immutable 문자열 (숫자, 불린, 문자열은 모두 immutable)
# 리스트 데이터 바꾸기
numbers = [1, 2, 3, 4]
numbers[0] = 5
print(numbers)
[5, 2, 3, 4]
# 문자열 데이터 바꾸기
name = "codeit"
name[0] = "C"
print(name)
Traceback (most recent call last):
File "untitled.py", line 3, in <module>
name[0] = "C"
TypeError: 'str' object does not support item assignment # 오류 나옴!
자릿수 합 구하기
# 자리수 합 리턴
def sum_digit(num):
total = 0
str_num = str(num)
for digit in str_num:
total += int(digit)
return total
# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
digit_total = 0
for i in range(1, 1001):
digit_total += sum_digit(i)
print(digit_total)
13501
주민등록번호 가리기
1-1
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"))
1-2. 조인사용
- join : 문자열 리스트를 구분자로 결합하여 하나의 문자열로 만들어 줌
<예시>
units = ["cm", "m", "yard"]
units_to_string = ', '.join(units)
print(type(units_to_string))
print(units_to_string)
<class 'str'>
cm, m, yard
<조인사용 문제답안>
def mask_security_number(security_number):
num_list = list(security_number)
# 마지막 네 값을 *로 대체
for i in range(len(num_list) - 4, len(num_list)):
num_list[i] = '*'
# 리스트를 문자열로 복구하여 반환
return ''.join(num_list)
1-3. 모범답안
def mask_security_number(security_number):
return security_number[:-4] + '****'
# 테스트
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****
팰린드롬
<나의 답안>
def is_palindrome(word):
first_charater = word[:1]
last_charater = word[-1]
second_charater = word[1:2]
last_sec_charater = word[-2]
if first_charater == last_charater and second_charater == last_sec_charater:
return("True")
else:
return("False")
# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))
True
False
True
True
False
<모범 답안>
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"))
Author And Source
이 문제에 관하여(TIL | 파이썬 기초 # 8), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sihaha/TIL-파이썬-기초-8저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)