학습 정리 - 리스트와 문자열 (2025.01.03)

수아·2025년 1월 3일
0

학습 정리

목록 보기
4/51
post-thumbnail

회고 리스트

1. 아래의 별을 찍으시오.

1)
*****
*****
*****
*****
*****

for i in range(5) :
    for j in range(5) :
        print("*", end = "")
    print()

2)
*
**
***
****
*****

for i in range(1,6) :
    for j in range(i) :
        print("*", end = "")
    print()

3)
*****
****
***
**
*

for i in range(5) :
    for j in range(5-i) :
        print("*", end ="")
    for j in range(i) :
        print(" ", end = "")
    print()

4) (빈칸 대신 언더바를 넣음)
____*
___**
__***
_****
*****

for i in range(1, 6) :
    for j in range(5-i) :
        print(" ", end = "")
    for j in range(i) :
        print("*", end = "")
    print()

5) (빈칸 대신 언더바를 넣음)
*****
_****
__***
___**
____*

for i in range(5, 0 ,-1) :
    for j in range(5-i) :
        print(" ", end = "")
    for j in range(i) :
        print("*", end="")
    print()

2. mutable 과 immutable 의 데이터 종류및 개념에 설명하시오.

mutable과 immutable

- mutable

: 데이터를 수정할 수 있고 수정해도 메모리 주소는 변하지 않는다.
: list, dict

# 예시에서 나온 메모리 주소는 바뀔 수 있음
lst = [1, 2, 3]
print(lst)	# 출력 : [1, 2, 3]
print(id(lst))	# 출력 : 1945394713088

lst.append(4)
print(lst)	# 출력 : [1, 2, 3, 4]
print(id(lst))	# 출력 : 1945394713088

- immutable

:데이터를 수정할 수 없고 수정하려고 하면 새로운 객체가 생성되어 메모리 주소가 바뀐다.
: int, float, str, tuple

# 예시에서 나온 메모리 주소는 바뀔 수 있음
x = 10
print(x, id(x))		# 출력 : 10 1945317868048

x *= 3
print(x, id(x))		# 출력 : 30 1945317868688

3. 아래가 에러가 나는 이유는?

name = "홍길동"
name[2] = "순"

문자형은 immutable하기 때문에 한 번 선언되면 수정할 수 없다.
마지막 글자를 "순"으로 바꾸고 싶다면 새로운 문자열로 만들어야 한다.
이 경우 슬라이싱 등을 사용해 문자열을 새로 생성해야 하며, 새 문자열은 기존 문자열과 다른 메모리 주소를 가지게 된다.

# 예시에서 나온 메모리 주소는 바뀔 수 있음
name = "홍길동"
print(id(name))		# 출력 : 1945420018864

name = name[:2] + "순"
print(name, id(name))	# 출력 : 홍길순 1945420169984

name = "홍길순"
print(name, id(name))	#출력 : 홍길순 1945421592208

4. 리스트와 문자열형 에서 제공되는 연산( *, + ) 두가지에 대하여 설명하시오.

- +

: + 앞부분과 + 뒷부분을 연결해준다.

- *

: 곱하는 횟수만큼 해당 리스트 또는 문자열을 반복해준다.
: 뒤에는 0 이상의 정수만 올 수 있다.

lst1 = [1, 2, 3]
lst2 = [4, 5]
str1 = "내일은 "
str2 = "주말"

print(lst1 + lst2)	# 출력 : [1, 2, 3, 4, 5]
print(lst1 * 3)		# 출력 : [1, 2, 3, 1, 2, 3, 1, 2, 3]

print(str1 + str2)	# 출력 : 내일은 주말
print(str2 * 10)	# 출력 : 주말주말주말주말주말주말주말주말주말주말

# str1 * str2 는 오류

5. 아래의 연산자를 예를 들어 설명하시오.

  • // : 몫
  • / : 실수형 나눗셈
  • ** : 거듭제곱
  • * : 곱하기
  • % : 나머지
    나머지 계산을 이용해서 홀짝 구분이 가능하다.
print(71 // 4)	# 출력 : 17
print(29 / 3)	# 출력 : 9.666666666666666
print(3 ** 4)	# 출력 : 81
print(3 * 4)	# 출력 : 12
print(3 % 2)	# 출력 : 1

6. 복합 대입 연산자에 대하여 설명하시오.

복합 대입 연산자는 기존 값에 연산을 수행하여 다시 저장하는 데 사용된다. 복합 대입 연산자는 불필요한 중간값을 생성하지 않고 값을 수정해서 메모리 효율적이고 실행 속도가 빠르다. 사용하면 더 간결하고 효율적이다.

+=, -= , *=, /=, //=, **=, %= 모두 가능하며 왼쪽 변수에 오른쪽 수를 연산하여 대입하면 된다.

7. 파이썬 에서 연산자 우선순위 와 결합 방향 에 대하여 설명하시오.

우선순위 ↓

1) 괄호
2) 거듭제곱 - 우측 결합
3) 단항 연산자(양수, 음수) - 좌측 결합
4) 곱셈, 나눗셈, 몫, 나머지 - 좌측 결합
5) 덧셈, 뺄셈 - 좌측 결합
6) 비교 연산자 (==, !=, <, > 등) - 좌측 결합
7) 논리곱 (and) - 좌측 결합
8) 논리합 (or) - 좌측 결합
9) 대입 연산자 (=) - 우측 결합

8. 리스트에서 슬라이싱 연산과 index 접근법을 예를 들어 설명하시오.

  • 인덱스 접근 (Indexing)
    : 리스트에서 특정 위치의 요소를 접근한다.
    : 인덱스는 0부터 시작한다.
    : 음수의 경우 오른쪽부터 왼쪽으로 접근한다.
    (list[-1]은 마지막 요소)

  • 슬라이싱 (Slicing)
    : 리스트의 일부분을 추출한다.
    : [start : end : step] 형태
    : step은 간격이며 1일 경우 생략 가능
    : start가 시작일 경우 생략 가능 (start는 포함)
    : end가 끝일 경우 생략 가능 (end는 포함되지 않음)
    : 음수도 가능하다.

my_list = [10, 20, 30, 40, 50]
#인덱스
print(my_list[0])  # 출력 : 10
print(my_list[4])  # 출력 : 50
print(my_list[-2]) # 출력 : 40

# 슬라이싱
print(my_list[1:4:2])	# 출력 : [20, 40]
print(my_list[:3])		# 출력 : [10, 20, 30]
print(my_list[:])		# 출력 : [10, 20, 30, 40, 50]
print(my_list[::2])		# 출력 : [10, 30, 50]
print(my_list[-4:-1])	# 출력 : [20, 30, 40]
print(my_list[::-1])	# 출력 : [50, 40, 30, 20, 10]

9. 아래의 의미는?

st = [1,2,3,4]
st[:] = []

st[:] = [] 는 리스트의 내용을 비우는 것이다.
st[:]는 리스트 st의 전체 요소를 참조하는데 []는 빈 리스트이기 때문에 리스트 st의 전체가 빈 리스트로 대체된다.
이때 리스트의 주소는 그대로 유지되고 내용만 빈 리스트가 된다.
(리스트는 mutable)

# 예시에서 나온 메모리 주소는 바뀔 수 있음
st = [1, 2, 3, 4]
print(st, id(st))   # 출력 : [1, 2, 3, 4] 1945416016960
st[:] = []
print(st, id(st))   # 출력 : [] 1945416016960

오늘은 별찍기를 많이 했다.
실행시켜보면 내 생각대로 안 된 경우가 많아서 당황스러웠는데
빨리 해야겠다고 생각해서 머리가 잘 안 굴러간 것 같다.
복습 겸 다시 해보니 재밌다.ㅋㅋㅋㅋ

2개의 댓글

comment-user-thumbnail
2025년 1월 3일

별찍기 하신다고 고생 많으셨습니다. ^^;

1개의 답글