1. 문자열

1) 문자열 연산

대부분의 프로그래밍 언어처럼 문자열 연산이 가능합니다.

문자열에서 + 연산자는 문자열을 연결시키도록 연산자 오버로딩이 되어 있습니다.

str1 = "python"
str2 = "java"
print(str1 + " and " + str2) # python and java


또한 문자열과 정수는 * 연산이 가능한데, 문자열에서는 반복이 되도록 연산자 오버로딩이 되어있습니다.

str1 = 'python'
print(str1 * 3) # pythonpythonpython


그런데 문자열과 정수는 + 연산을 할 수 없습니다.

str1 = "python"
print(str1 + 10) # TypeError: must be str, not int

이는 문자열과 정수에 대한 연산자 오버로딩이 되어있지 않기 때문입니다.




2) immutable ( 변경 불가능 )

문자열은 immutable입니다.

str1 = 'python'
str1[0] = 'z' # TypeError: 'str' object does not support item assignment



3) 서식

" name:victolee, age:26 "양식으로 출력하는 여러가지 방법에 대해 알아보겠습니다.

str()

문자열과 정수를 같이 출력하고 싶으면, str() 함수를 사용해서 정수를 문자열로 만들어야 합니다.

name = "victolee"
age = 26
print("name:" + name + ", age:" + str(age))


format()

format() 함수를 사용해서 데이터와 데이터 포맷을 정의할 수 있습니다.

또한 문자열에 format() 메서드를 호출하여 값을 동적으로 할당할 수 있습니다.

format() 메서드의 인자가 들어갈 자리를 {정수}로 명시하면 됩니다.

name = "victolee"
age = 26
print("name:" + format(name, "s") + ", age:" + format(age, "d"))
print("name:{0}, age:{1}".format(name, age))


% 연산자

나머지 연산자인 %가 문자열에서는 format이 되도록 오버로딩 되어있습니다.

tuple( 튜플 )을 사용하는 방법은, % 전에 데이터가 들어갈 자리에 데이터 타입을 작성하고, % 뒤에 실제 데이터를 tuple로 넘겨줍니다.

dictionary( 딕셔너리 )를 사용하는 방법은, % 전에 dictionary의 key와 데이터 타입을 작성하고, % 뒤에 실제 데이터를 dictionary로 넘겨줍니다.

튜플과 딕셔너리 자료형에 대해서는 다음 글에서 다루도록 하겠습니다.

# tuple을 이용한 format
print("name:%s, age:%d" % (name, age))
# dictionary을 이용한 format
print("name:%(name)s, age:%(age)d" % {'name': name, 'age': age})





2. 리스트 ( List )

리스트는 대괄호[ ]로 표기하며, 리스트에 있는 객체들은 순서를 가집니다.


1) 인덱싱 ( indexing )

li = [1, 2, 3, 4, 5]
print(li[1], li[-1]) # 2 5



2) 슬라이싱 ( slicing )

기본 사용법

print(li[0:])               # [1, 2, 3, 4, 5]
print(li[0::2]) # [1, 3, 5]
print(li[len(li)::-1]) # [5, 4, 3, 2, 1] ( 슬라이싱의 step을 이용해서 li reverse 했다. )


슬라이스를 이용하여 치환

li[0:2] = [10, 20]
print(li) # [10, 20, 3, 4, 5]

li[1:4] = [20]
print(li) # [10, 20, 5]


슬라이스를 이용하여 삭제

li[1:2] = []
print(li) # [10, 5]


슬라이스를 이용하여 삽입

li[1:1] = [2]
print(li) # [10, 2, 5]

li[2:2] = [3, 4] # 여러개 삽입
print(li) # [10, 2, 3, 4, 5]

li[:0] = ['first']
print(li) # ['first', 10, 2, 3, 4, 5]

li[len(li):] = ['last']
print(li) # ['first', 10, 2, 3, 4, 5, 'last']



3) mutable ( 변경 가능 )

리스트는 mutable 합니다.

li = [1, 2, 3, 4, 5]
del li[1:3]
print(li) # [1, 4, 5]

li[0] = li[0] + 10
print(li) # [11, 4, 5]



4) 메서드

List의 여러가지 메서드를 알아보겠습니다.

# 맨 앞에 삽입
li = [1, 2, 3, 4, 5]
li.insert(0, 0)
print(li) # [0, 1, 2, 3, 4, 5]

# 맨 마지막에 삽입
li.append('last')
print(li) # [0, 1, 2, 3, 4, 5, 'last']

# reverse
li.reverse()
print(li) # ['last', 5, 4, 3, 2, 1, 0]

# 제거
li.remove('last')
print(li) # [5, 4, 3, 2, 1, 0]



5) 리스트를 스택, 큐로 사용하기

스택( stack )

stack = []
stack.append(10)
stack.append(20)
stack.append(30)
print(stack) # [10, 20, 30]

stack.pop()
print(stack) # [10, 20]


큐 ( queue )

stack = []
stack.append(10)
stack.append(20)
stack.append(30)
print(stack) # [10, 20, 30]

stack.pop()
print(stack) # [10, 20]



6) 정렬

li = [1, 12, 5, 18, 9, 6, 2]
li.sort()
print(li) # [1, 2, 5, 6, 9, 12, 18]

# 역순으로 정렬
li.sort(reverse=True)
print(li) # [18, 12, 9, 6, 5, 2, 1]

# 문자열을 key로 하여 정렬
li.sort(key=str)
print(li) # [1, 12, 18, 2, 5, 6, 9]

li.sort(key=int)
print(li) # [1, 2, 5, 6, 9, 12, 18]




3. 셋 ( Set )

Set은 집합과 관련된 자료형으로 중괄호{ }로 표기하며, 순서가 없고, 중복을 허용하지 않습니다.


1)

List의 중복되는 요소를 제거할 때 유용합니다.

li = [ 1, 2, 3, 2, 2, 4, 5, 5, 6]
s = set(li)
print(s) # set([1, 2, 3, 4, 5, 6])



2) 메서드

s = {1, 2, 3, 4, 5, 6}
s.add(9)
print(s) # set([1, 2, 3, 4, 5, 6, 9])

s.discard(9) # 원소 9를 삭제
print(s) # set([1, 2, 3, 4, 5, 6])

s.clear() # set을 비운다.
print(s) # set([])

# remove() discard()와 같은 기능이지만, set에 존재하지 않은 원소를 삭제하려 하면 에러 발생
s.remove(1) # KeyError:1



3) mutable ( 변경 가능 )

Set은 mutable 합니다.

s = {1, 2, 3}
print(s)
s.update({4, 5})
print(s) # set([1, 2, 3, 4, 5])




이상으로 자료형 문자열과 List, Set에 대해 알아보았습니다.