이러한 기능들을 통해 데이터를 핸들링 하는 것이 목표다.
문자열은 str형으로 체크되지만 내부적으로는 List로 다루어진다.
따라서 인덱스를 통해 각 요소에 접근 가능하다.
a = "hello"
type(a)
>> class 'str'
print(a[0])
>> 'h'
a = ['a', 'b', "cat"]
print(a[2])
>> cat
print(a[2][1]
>> c
a = [1, 2, 3]
b = [4, 5, 6]
print(a+b)
>> [1, 2, 3, 4, 5, 6]
print(a * 2)
>> [1, 2, 3, 1, 2, 3]
print(len(a))
>> 3
얘들은 '한 개'의 요소만 추가한다.
단, 여기서의 요소는 문자열, List 그 자체 등을 포함한다.
a = []
print(a)
>>
a.append('apple')
print(a)
>> ['apple']
a.insert('banana')
print(a)
>> ['banana', 'apple']
# 이미 요소가 존재하는 인덱스에 insert를 하면
# 기존의 자료는 한 칸 오른쪽으로 밀려난다
리스트이름.extend(추가할 요소: List 또는 문자열)
연결 연산자와 비슷한 형태로 동작하지만 하나의 차이점이 있다.
연결 연산자'+'
는 자기 자신을 연산의 대상으로 하지 않는 이상 기존 자료에 영향을 주지 않는다.
extend()
는 직접 기존 자료에 영향을 준다
a = [1, 2, 3]
b = [4, 5, 6]
print(a + b)
>> [1, 2, 3, 4, 5, 6]
print(a)
print(b)
>> [1, 2, 3]
>> [4, 5, 6]
a.extend(b)
print(a)
>> [1, 2, 3, 4, 5, 6]
참고: 성능 항상을 위하여 - Append() vs. 연산자 '+'
연산자`'+'`는 말 그대로 리스트와 또 하나의 List를 더하는 것이다
`append()`는 이미 존재하는 List에 값만 추가하는 것이다
List에 하나의 항목만 추가할 때는 append()
를 사용한다
List끼리 이어야 할 경우(concatenation)에는 연산자'+'
또는 extend()
를 사용한다
⚙︎ Python list의 +=와 append의 성능 분석 (보너스: +=와 extend 성능 분석)
del
del 리스트이름[인덱스]
pop()
리스트이름.pop[인덱스]
기본은 오름차순
내림차순: 리스트이름.sort(reverse = True)
a = [1, 2, 3]
b = 4 not in a
print(b)
>> True
2차원 테이블의 효율성은 이미 오랜 기간을 거쳐 입증되었으며
이를 Python에서 표현하는 것이 중첩 List라 할 수 있다. (다차원 List)
중첩 List는 매우매우 중요하다
웬만하면
- 자료형이 같은 데이터를 함께 다룬다 (달라도 괜찮지만)
- 외부 List의 element 개수와 내부 List의 element 개수가 같도록 맞춰준다
numpy와 pandas를 이용한 data handling 기법이 사용된다.
참고: 전개 연산자란? 애스터리스크(*)를 붙여줌으로써 여러 개의 값을 가져올 수 있다
# 함수: 달력 만들기
def cal(year, month):
blank = [6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
last_date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
print(f"\t\t\t {year}년 {month}월")
print("일 \t월 \t화 \t수 \t목 \t금 \t토")
for _ in range(blank[month-1]):
print("\t", end='')
for i in range(1, last_date[month-1]+1):
print(f"{i}\t", end='')
if(i+blank[month-1])%7==0:
print("\n")
print("\n\n")
cal(2022, 6)
>>
2022년 6월
일 월 화 수 목 금 토
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
# 임의의 숫자공이 담긴 바구니 만들기
bowl = []
while True:
# 임의의 숫자 하나를 ball에 받는다
ball = random.randrange(1, 100+1)
# ball이 중복되지 않도록 이미 bowl 안에 있는지 검사한다
# ball이 bowl 안에 없다면 append
if ball not in bowl:
bowl.append(ball)
# bowl 안의 ball 개수가 45개가 되면 수집 종료
if len(bowl) == 45:
break
bowl.sort()
print(bowl)
>>
...
# 윤년
# 1. 400으로 나누어떨어진다
# 2. 4로 나누어떨어지고 100으로 나누어 떨이지지 않아야 한다
def is_leap_year(year):
year = int(year)
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print(f"{year}년도는 윤년입니다")
else:
print(f"{year}년도는 평년입니다")
def get_feb_lastday(year):
year = int(year)
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
lastday = 29
else:
lastday = 28
return lastday
a = get_feb_lastday(2022)
print(a)
for i in range(2000, 2022+1):
is_leap_year(i)
>>
...
# while() 함수 활용
def bearbear():
while True:
try:
number_tree = int(input("우리는 몇 그루의 나무를 베어야 할까요?\n"))
if number_tree == 0:
print("0보다는 큰 수를 입력하셔야 해요")
return bearbear()
print("오케이 "+str(number_tree)+" 그루의 나무를 베어 볼게요")
break
except ValueError:
print("숫자만 입력하셔야 해요")
while True:
try:
number_slice = int(input("몇 번씩 찍어야 넘어갈까요?\n"))
print("알겠어요 "+str(number_slice)+"번씩 도끼질 해볼게요\n")
break
except ValueError:
print("여기도 숫자만 입력하셔야 해요")
for i in range (1, number_tree+1):
print("<", i, "번째 나무 베는 중 >")
for j in range(1, number_slice+1):
print(j,"번째 도끼질하는 중 ")
print()
print("나무 베기 끝!")
bearbear()
>>
우리는 몇 그루의 나무를 베어야 할까요?
3
오케이 3 그루의 나무를 베어 볼게요
몇 번씩 찍어야 넘어갈까요?
5
알겠어요 5번씩 도끼질 해볼게요
< 1 번째 나무 베는 중 >
1 번째 도끼질하는 중
2 번째 도끼질하는 중
3 번째 도끼질하는 중
4 번째 도끼질하는 중
5 번째 도끼질하는 중
< 2 번째 나무 베는 중 >
1 번째 도끼질하는 중
2 번째 도끼질하는 중
3 번째 도끼질하는 중
4 번째 도끼질하는 중
5 번째 도끼질하는 중
< 3 번째 나무 베는 중 >
1 번째 도끼질하는 중
2 번째 도끼질하는 중
3 번째 도끼질하는 중
4 번째 도끼질하는 중
5 번째 도끼질하는 중
나무 베기 끝!
import random
import time
# picked_number: 내가 선택할 숫자
# start_number / end_number: 운을 시험해볼 숫자 범위(시작, 끝)
def random_game(picked_number, start_number, end_number):
random_number = random.randrange(start_number, end_number+1)
if random_number == picked_number :
print("당첨!")
return "당첨"
else:
print("다시!... 2초후에...")
time.sleep(2)
random_game(picked_number, start_number, end_number+1)
random_game(3, 1, 10)