파이썬 기초 정리(자료형-리스트)

리스트

리스트 자료형은 순서 있고, 중복, 수정, 삭제가 가능한 유일한 자료형 이다.

리스트 선언

a = []
b = list()
c = [70, 75, 80, 85] # print(len(c)) => 4
d = [1000, 10000, 'Ace', 'Base', 'Captine'] # 서로 다른 자료형을 담을 수 있음.
e = [1000, 10000, ['Ace', 'Base', 'Captine']] # 리스트 원소로 리스트 okay
f = [21.42, 'foobar', 3,4, False, .3.141592]

리스트 인덱싱

인덱싱은 내가 원하는 데이터를 꺼내오는 과정

print(type(d), d) # <class 'list'> [1000, 10000, 'Ace', 'Base', 'Captine']
print(d[0] + d[1] + d[1]) # 1000 + 10000 + 10000 => 21000
print(d[-1]) # 'Captine'
print(e[-1][1], type(e[-1][1])) # 'Base' <class 'str'>
print(list(e[-1][1])) # ['B','a','s','e']
  • 문자열은 시퀀스 이기 때문에 리스트로 형 변환을 하게 되면 한글자 한글자 리스트 형태로 분해가 된다.

리스트 슬라이싱

print(d[0:3]) # [1000, 10000, 'Ace']
print(d[2:]) # ['Ace',' Base', 'Captine']
print(e[-1][1:3]) # ['Base', 'Captine']

리스트 연산

print(c+d) # [70, 75, 80, 85, 1000, 10000, 'Ace', 'Base', 'Captine']
print(c*3) # [70, 75, 80, 85, 70, 75, 80, 85, 70, 75, 80, 85] (순서가 유지됌)!
print('test' + c[0]) # error! <class 'str'> + <class 'int'> 
print('test'+ str(c[0])) # test700
  • 리스트 + 리스트 = 리스트, 리스트의 연산은 리스트가 나온다.

리스트 값 비교

print(c == c[:3] + c[3:]) # True

리스트 Id( Identity )

temp = c
print(id(temp) == id(c)) # True

문자열, 숫자와 마찬가지로 변수에 값이 할당 될 때 값이 같다면 같은 아이디 값을 갖는다. ( 같은 아이디를 참조하기 때문에 temp나 c중 한곳에 수정이 일어나면 나머지 한 곳도 수정이 일어난다. )

리스트 수정, 삭제

c = [70, 75, 80, 85] 
c[0] = 4
print(c[0]) # 4
c[1:2] = ['a', 'b', 'c']
print(c) # [4, 'a', 'b', 'c', 80, 85] 

c = [70, 75, 80, 85] 
c[1] = ['a', 'b', 'c']
print(c) # [70, ['a', 'b', 'c'] , 80, 85]

수정을 할 때에는 인덱스 번호로 접근하여 값을 할당.

리스트에 리스트를 할당 할 때는 조금 케이스가 나뉜다.

c[1] = ['a', 'b', 'c'] # 리스트 인덱스에 직접 접근하여 값을 할당
print(c[1:2]) #  [70, ['a', 'b', 'c'], 80, 85] , 리스트 형태 그대로 값이 할당 된다.

c[1:2] = ['a', 'b', 'c'] # 슬라이스를 활용하여 값을 할당
print(c) # [70, 'a', 'b', 'c', 80, 85]
c[1:2] = [['a','b','c']]
print(c) # [70, ['a', 'b', 'c'], 80, 85]

c = [70, ['a', 'b', 'c'], 80, 85]
c[1:2] = []
print(c) # [70, 80, 85]

슬라이싱을 이용하여 원소에 리스트 값을 할당하면 인자로 전달된 리스트가 분해되어 순서대로 원소의 값이 되지만, 인덱스에 직접 접근하여 값을 할당하면 할당받는 리스트의 원소 자체의 타입이 리스트가 된다.

# delete
c = [70, ['a', 'b', 'c'], 80, 85]
del c[1] # del은 예약어
print(c) # [70, 80, 85]

리스트 함수

a = [ 5, 2, 3, 1, 4]
a[5] = 10
print(a) # [5, 2, 3, 1,4] > 값 반영 안됌
a.append(10) # a의 마지막에 10 삽입

a.sort() # 오름차순 정렬
print(a) # [1, 2, 3, 4, 5]

a.reverse() # 리스트를 역순으로!
print(a) # [5, 4, 3, 2, 1]

print(a.index(3) == a[3]) # True

a.insert(2, 7)
print(a) # [5, 2, 7, 4, 3, 2, 1]

a.remove(3)
print(a) # [5, 2, 1, 4]

a = [ 5, 2, 3, 1, 4]
print(a.pop()) # 4 
print(a) # [5, 2, 3, 1] => pop() 는 기존배열을 바꾼다.

ex = [8, 9]
a.extend(ex) # ex를 a에 붙인다.
print(a) # [5, 2, 3, 1, 4, 8, 9]
  • list.append(value) : 리스트 끝 부분에 value를 삽입
  • sort() : 오름차순 정렬, 배열의 길이가 길어지면 처리하는데 시간이 오래걸린다.
  • list.insert(targetIndex, value) : list의 target index 부분에 value를 넣고 뒤에 있는 원소들을 뒤로 밀어버린다.
  • list.remove(value) : list에서 value값을 가진 원소 제거
  • list.pop() : list의 가장 마지막 원소를 return 그리고 기존 배열을 수정한다.(마지막 원소가 빠진 배열로 ! )

    • stack 과 관련
    • 참고..
    a = [ 5, 2, 3, 1, 4]
    while a : # while 문에서 빈 배열은 false
    data = a.pop()
    print(data)
    
    # output
    4
    1
    3
    2
    5
  • list.count(value) : list에 value가 몇개 있는지 return 한다.

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook