listIsContainer = [] # 빈 리스트를 만든다.
print(type(listIsContainer)) # 리스트인가?
(결과)<class 'list'>
# 방금 생성한 리스트에는 아무 것도 들어있지 않다.
print(len(listIsContainer))
(결과)0
listIsContainer[0:1] = '1' # 리스트 첫번째 자리에 1 이라는 스트링을 넣는다.print(listIsContainer)
(결과)['1']
# 리스트에 무언가 들어 있다가 이제는 새로 생성할 때와 같아졌으니 리스트를 비운다.
listIsContainer = []
print(listIsContainer)
(결과)[]
listNumberTwo = ["firstString"]listIsContainer.append(listNumberTwo)print(listIsContainer) # 리스트 안에 또 다른 리스트를 넣을 수도 있다.
(결과)[['firstString']]
listIsContainer[:] = '1'# 아직까지는 [:] 의미를 알 수 없어도 '1'이 리스트에 들어갔음을 알 수 있다.print(listIsContainer)
결과)['1']
listIsContainer[:] = '2'# '1'이 들어 있었는데 그것이 삭제되고 '2'가 들어갔음을 알 수 있다.print(listIsContainer)
결과)['2']
# 리스트의 가장 첫번째 요소는 정수 0으로 접근 가능하다.print(listIsContainer[0:1])
결과)['2']
# 두번째 요소는 정수 1로 접근 가능하다.listIsContainer[1:2] = '3'print(listIsContainer)
결과)['2', '3']
listIsContainer = []# 리스트에 '1'을 추가listIsContainer[:] = '1'# 리스트에 있는 '1' 자리에 '2'를 넣어서 '1'은 삭제되고 '2'로 바뀜listIsContainer[0:1] = '2'print(listIsContainer)
(결과)['2']
# 리스트는 객체이므로 변수에 할당할 수 있고 그 변수를 통해 객체에도 접근할 수 있다.ln = list('0123456789')print(ln)
결과)['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# range() 함수를 쓰면 리스트에 숫자를 담을 수 있다.ln = list(range(0, 10))print(ln)
결과)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 알파벳 문자 출력
print('a')
결과)a
# 이런 식으로 리스트의 요소를 모두 적는 것도 가능하다.alphaList = list('abcdefghijklmnopqrstuvwxyz')print(alphaList)
결과)['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
# ranger() 함수에 알파벳 문자를 써서 쉽게 리스트를 만들 수는 없을까?print(list(range('a', 'z')))
결과)TypeError: 'str' object cannot be interpreted as an integer
# 이렇게 하면 정수를 조작해서 알파벳 소문자를 만들 수 있다.print(chr(97))
결과)a
# 이제 range() 함수를 사용해서 알파벳 요소를 가진 리스트를 생성할 수 있다.결과)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
다시
코드 실행 과정을 시각적으로 표현해 주는 웹 서비스로 동작 과정을 살펴보자.
# 객체가 무엇인지는 모르지만 list라는 것이 추가로 무엇을 더 가지고 있는지 확인해 보자.help(list)
# 리스트 라는 객체 내부에 많은 수의 함수들이 준비되어 있음을 알 수 있다. 이 함수를 불러보자.
# Line 1 에서 리스트를 생성했고 변수 l 에 객체의 주소를 할당했다. 이제 변수 l 을 통해서 우리가 생성한 리스트에 접근할 수 있다.# Line 3의 . (period)는 무엇인가? 이것은 객체에 접근하는 . 연산자 (dor operator)로 리스트의 경우 리스트 내부에 미리 준비된 메쏘드에 접근할 수 있게 해준다. 친절한 편집기가 어떤 메쏘드를 사용할 수 있는지 보여주고 있다.
# 리스트에 요소 추가하기# 리스트 슬라이스 표기법에 의한 요소 추가
l = ['a']
l[1:2] = 'b'
print(l)
결과)
['a', 'b']
# 증감 할당 연산자에 의한 요소 추가t = ['hello']t += ['world']
print(t)
결과)['hello', 'world']
# 리스트 메쏘드에 의한 요소 추가l = ['a']l.append('b')print(l)
결과)['a', 'b']
# 리스트 인덱스 번호에 의한 요소 추가?l = ['a']l[1] = 'b'print(l)
결과)IndexError: list assignment index out of range
# 존재하지 않는 인덱스 번호로는 요소 추가를 할 수 없다. 존재하지 않는 공간의 인덱스 번호를 사용하여서 '인덱스 범위 벗어남'의 에러가 발생한다.
# 리스트 메쏘드에 의한 요소 제거l = ['a']l.append('b')l.remove('b')print(l)
결과)['a']
# del 키워드에 의한 리스트 요소 제거 (슬라이스 범위 제거)l = [1, 2, 3, 4, 5]
del l[1:4]
결과)[1, 5]
# del 키워드에 의한 리스트 요소 제거 (홀수 개의 정중앙 요소 제거)l = [1, 2, 3, 4, 5]
del l[int(len(l)/2)]
결과)[1, 2, 4, 5]
# in 키워드를 이용하는 방법l = ['a']if 'a' in l:print('a is exist.')else:print('a is not exit.')
결과)a is exist.
# 리스트의 count 메쏘드l = ['a', 'b']pos = l.count('a')print(pos)
결과)1
# 리스트 l 에 a가 첫번째 = 1 에 있는건가?l = ['a', 'b']pos = l.count('b')print(pos)
결과)1
# 리스트는 중복 요소도 허용하며 count() 메쏘드는 요소가 몇 개 있는지 알려준다.l = ['a', 'b', 'a']pos = l.count('a')print(pos)
결과)2
# 리스트의 index 메쏘드l = ['a', 'b', 'a']pos = l.index('a')print(pos)
결과)0
# 리스트의 0 번째 요소가 정말 'a' 인가?l = ['a', 'b', 'a']pos = l.index('a')print(l[0])
결과)a
# 그럼 리스트에 원하는 요소가 있는지는 어떻게 알 수 있는가?
l = ['a', 'b', 'a']if l.count('a'): print('a Index: ' + str(l.index('a')))
결과)a Index: 0
# 명시적인 요소의 시작
l = ['1', '2', '3']print(l[:2])
결과)['1', '2']
# 명시적인 요소의 끝l = ['1', '2', '3']print(l[2:])
결과)['3']
# 시작 요소 하나만l = ['1', '2', '3']print(l[:1])
결과)['1']
l = ['1', '2', '3']print(l[0:1])
결과)['1']
# 마지막 요소 하나만l = ['1', '2', '3']print(l[-1:])
결과)['3']
# 건너뛰면서 요소 선택하기l = ['1', '2', '3', '4', '5']print(l[::2])
결과)['1', '3', '5']
l = ['1', '2', '3', '4', '5']print(l[1::2])
결과)['2', '4']
# 리스트 뒤집기l = ['1', '2', '3', '4', '5']print(l[::-1])
결과)['5', '4', '3', '2', '1']
# 리스트 슬라이싱으로 요소 개수 원하는 만큼 잘라내기colors = ['red', 'yellow', 'black', 'brown', 'white', 'purple']
divider = 5startPos = 0endPos = len(colors)
for i in range(startPos, endPos+divider, divider): printOut = colors[startPos : i] startPos = iif printOut != []: print(printOut)
결과)['red', 'yellow', 'black', 'brown', 'white']['purple']
# 일반적인 언어에서의 리스트 카운트
l = range(1, 11)
total = []count = 0for n in l: total.append(n) count += 1
print('total: ', total)print('count: ', count)
결과)total: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]count: 10
#enumerate 내장함수를 사용한 리스트 카운트
l = range(1, 11)
total = []for c, n in enumerate(l): total.append(n)
print('total: ', total)print('count: ', c + 1)
결과)total: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]count: 10
# len() 내장 함수를 이용한 리스트 카운트l = range(1, 11)
total = []for n in l: total.append(n)
print('total: ', total)print('count: ', len(total))
결과)total: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]count: 10
# zip() 함수를 이용한 index 값 얻기l = ['apple', 'lemon', 'grape']
print(list(zip(l, range(1, 100))))
결과)[('apple', 1), ('lemon', 2), ('grape', 3)]
# zip() 함수로 생성한 데이터 unzip 하기l = ['apple', 'lemon', 'grape']u = {f: num for f, num in zip(l, range(1, 100))}print(u)
결과){'grape': 3, 'lemon': 2, 'apple': 1}
# 스트링을 가지고 리스트를 만들면 개별 글자를 요소로하는 리스트 전체가 생성되고 요소비교가 가능해진다.fruits = ['banana!', '$apple', 'peach#']
rmTarget = list('!$#')result = []
for f in fruits: fList = list(f) for r in rmTarget: while True: try: fList.remove(r) except: break result.append(''.join(fList))
결과)['banana', 'apple', 'peach']# 동일한 로직을 스트링 조작을 이용하도록 바꿀 수 있다.ls = ['##apple!', '!banana$', '!le$$mon#', 'peach']
filter = '!$#'result = []for l in ls:for f in filter:if f in l:
l = l.replace(f, '')result.append(l)print(result)결과)['apple', 'banana', 'lemon', 'peach']
# 동일한 로직을 재귀함수를 이용하도록 바꿀 수 있다.ls = ['##apple!', '!banana$', '!le$$mon#', 'peach']
filter = '!$#'
result = []
def removeFilter(word):
if len(word) < 1:
return wordif word[0] in filter:
return removeFilter(word[1:])
else:
return word[0] + removeFilter(word[1:])for l in ls:
result.append(''.join(removeFilter(l)))print(result)
결과)
['apple', 'banana', 'lemon', 'peach']
def main():
l1 = [1, 2, 3]
l2 = l1
# 두 객체는 같은 객체이다.
print('addr of id1: ', id(l1))
print('addr of id2: ', id(l2))
if id(l1) == id(l2):
print('[l1 is l2] - same object')
else:
print('[l1 is not l2]')
print('\t')
one = list(range(1, 4))
another = one.copy()
# 두 객체는 다른 객체이다.
print('addr of one: ', id(one))
print('addr of another: ', id(another))
if id(one) == id(another):
print('[one is another]')
else:
print('[one is not another] - diff. object')
pass
if __name__ == '__main__':
main()
# 결과
addr of id1: 2531229270592
addr of id2: 2531229270592
[l1 is l2] - same object
addr of one: 2531230033536
addr of another: 2531229270208
[one is not another] - diff. object
댓글 영역