230810 TIL

요시롱·2023년 8월 10일

TIL

목록 보기
2/8
post-thumbnail

Python 복습

문자열, 리스트
새롭게 알게된 것, 자주 헷갈리는 것 위주로 정리


문자열 인덱싱

  • 역슬래시는 인덱스번호가 부여되지 않는다.

Python의 immutable vs mutable

  • immutable 객체
    int, str, float, bool, tuple

  • mutable 객체
    list, dict, `set

  • id()type()을 이용하면 정확히 알 수 있다.

a = 10
print(id(a)) # a는 10이라는 데이터가 저장된 메모리 주소를 가리킨다. 140706287752264
a += 1       # a 변경
print(a)
print(id(a)) # a의 값이 변하면 메모리 주소가 변경된다. 140706287752296 

# int는 immutable하다. 
# 변경 전의 10이라는 데이터는 메모리에 계속 저장된다.

print('----------')

b = 'Hello World'
print(id(b)) # b는 'Hello World'가 저장된 메모리 주소를 가리킨다. 2247385331344
b += '!'     # b 변경
print(b)
print(id(b)) # b의 값이 변하면 메모리 주소가 변경된다. 2247371532976

# str는 immutable하다. 
# 변경 전의 'Hello World'이라는 데이터는 메모리에 계속 저장된다.

print('----------')

c = [1]
print(id(c))   # 2247385417280
c.append(2)
print(c)
print(id(c))   # 2247385417280
# list는 mutable이기 때문에 변경 전후의 메모리주소가 동일하다. 

사용되지 않는 값들은 Garbage Collection이 더이상 참조되지 않는 메모리를 정리한다.
참고 : https://blog.metafor.kr/163

문자열 메소드

  • s.rjust(n) : n칸에 문자열 s를 오른쪽 정렬한다.

  • s.ljust(n) : n칸에 문자열 s를 왼쪽 정렬한다.

  • s.center(n) : n칸에 문자열 s를 중앙 정렬한다.

  • s.strip([chars]) : 문자열 s 양끝의 공백이나 특수문자를 제거한다.

    • 기본 동작은 공백을 포함한 화이트문자(눈에 보이지 않는 문자. 공백, \t, \n 등)를 제거한다.
      - strip이 받는 chars인자 x는 제거할 문자 집합을 지정하는 문자열로, 모든 값 조합이 제거된다.
    print('&test&^^&'.strip('&')   # test&^^
    print('&test&^^&'.strip('&^')  # test
    print('&test&^^&'.strip('^&')  # test
  • s.split(x) : 구분자 x대로 문자열을 분리하여 리스트로 변환한다.
    • 기본 구분자는 공백, 개행문자 등의 화이트 문자
    s1 = 'Hello World'
    s2 = 'Hello\nWorld'
    
    print(s1.split())     # ['Hello', 'World']
    # print(s1.split('')) # ValueError: empty separator
	print(s1.split(' '))  # ['Hello', 'World']
    
	print(s2)             # Hello
						  #	World
	print(s2.split())	  # ['Hello', 'World']
	print(s2.split(' '))  # ['Hello\nWorld'] 이 경우에는 공백이 구분자라 개행문자는 포함되지 않는다. 
    

Python과 괄호

  • 집합과 딕셔너리는 중괄호를 이용한다.
  • 집합의 사용빈도가 낮아 딕셔너리랑 같은 괄호를 사용
  • 딕셔너리가 좀 더 많이 사용되기 때문에, {}는 빈 집합이 아닌 빈 딕셔너리이며, 공집합을 생성하기 위해서는 set()으로 생성해야한다. (생각해보면 당연한건데 처음 깨달았다......)

튜플의 생성

a = () # 튜플
print(type(a))

a = (1) # int
print(type(a))

a = (1, ) # 튜플
print(type(a))

리스트 변경

  • 리스트의 특정 범위의 값을 변경할 때, 인덱스 갯수와 추가되는 값의 갯수가 일치하지 않아도 인덱스 에러가 발생하지 않는다.
nums = [1, 2, 3, 4, 5]
#       0  1  2  3  4

nums[1:4] = [6, 7]         # [1, 6, 7, 5]
nums[1:4] = [6, 7, 8]      # [1, 6, 7, 8, 5]
nums[1:4] = [6, 7, 8, 9]   # [1, 6, 7, 8, 9, 5] 

nums[10:] = [6, 7, 8, 9]   # [1, 2, 3, 4, 5, 6, 7, 8, 9] 
						   # 그냥 제일 뒤에 붙는다. 

처음 파이썬 배울 땐 하드웨어 관련(특히 메모리) 나오면 언젠가는... 이러면서 흘려들었는데(죄송합니다) 지금은 다행히 큰 어려움 없이 이해할 수 있어서 오늘 공부도 즐거웠다. ✧。٩(ˊ ᗜ ˋ)و✧*。

0개의 댓글