리스트(List) 자료형

파이썬에는 다른 언어와 비슷하게 자료를 배열과 같이 사용하는 방법이 있습니다. 다른 언어와 같이 배열과 비슷한 특징이 있으나 여기서 추가 기능이 많이 추가 되어 있죠. 어떤 것들이 있는지 이 포스팅에서 정리하도록 하겠습니다.

1. 리스트 초기화와 접근(Indexing)

기본 초기화

리스트는 대괄호([ ]) 안에 리스트의 요소들이 저장됩니다. 대괄호하면 뭔가 배열이 생각나지 않으신가요? 대괄호에 저장하고싶은 원소를 쉼표로 구분하여 넣어주면 끝입니다.

intList = [1, 2, 3, 4, 5]
strList = ["reakwon", "tistory", "com"]
print (intList)
print (strList)
[1, 2, 3, 4, 5]
['reakwon', 'tistory', 'com']

 

원소 접근

만약 리스트의 원소에 접근하여 읽거나 값을 변경하고 싶다고 하면 인덱스를 사용하여 접근할 수 있습니다. 맨 앞 원소는 0번, 맨 뒤의 원소는 리스트의 길이 - 1이 되죠. 인덱스에는 부호 -가 붙을 수 있는데, 이때는 뒤의 인덱스를 의미하지만 -1부터 시작합니다. -1은 맨 마지막 원소의 인덱스입니다. -2는 맨 마지막 2번째 원소를 의미하게 되죠.

intList = [1, 2, 3, 4, 5]
strList = ["reakwon", "tistory", "com"]
print (intList[0], intList[1], intList[-1], intList[-2])
print (strList[0], strList[-1])

#strList 마지막의 원소 값 변경
strList[2] = 'COM'
print (strList)
1 2 5 4
reakwon com
['reakwon', 'tistory', 'COM']

 

슬라이싱 - i인덱스부터 j인덱스까지 접근 : [i : j ] 

그렇다면 만약 전체 원소에 접근하지말고 특정 인덱스(begin)부터 특정 인덱스 -1 (end) 까지 원소에 접근하고 싶다면 콜론(:)을 이용할수 있습니다. 마지막 처음 인덱스를 지정하지 않으면 0번부터 시작, 마지막 인덱스를 지정하지 않는다면 리스트의 끝까지를 의미합니다. 이 같은 법칙에 따라서 [:]은 리스트의 전체를 의미합니다. 

intList = [1, 2, 3, 4, 5]
strList = ["reakwon", "tistory", "com"]

print (intList[1:2])    #1번 원소부터 2번 원소 전까지
print (strList[1:])     #1번 원소부터 끝까지

# [1, 2, 3, 4, 5] 의 1번 인덱스부터 3-1=2번 index까지 값을 변경
intList[1:3] = [12, 13]
print(intList)
[2]
['tistory', 'com']
[1, 12, 13, 4, 5]

 

2. 리스트 원소 삭제

읽기와 변경뿐만 아니라 원소를 아예 리스트에서 삭제하고 싶다면 del 이라는 함수를 사용해서 삭제할 수 있습니다. 마찬가지로 슬라이싱으로 한꺼번에 리스트 원소를 삭제할 수도 있습니다.

intList = [1, 2, 3, 4, 5]
strList = ["reakwon", "tistory", "com"]

del intList[:3]	# 3번 인덱스 이전까지 원소 모두 삭제
del strList[2]	# 2번 인덱스 원소 삭제

print(intList)
print(strList)
[4, 5]
['reakwon', 'tistory']

 

 

 

3. 다중 리스트

리스트안에 리스트가 포함이 될 수 있습니다. 다중 리스트에 접근할때는 인덱스를 추가한 리스트만큼 인덱스를 반복하면 됩니다. 만약 아래와 같이 mergedList에 intList에 포함이 된다면 intList에 존재하는 원소에 접근하려할때는 인덱스를 어떻게 지정하면 좋을까요? 모든 것을 포함한 index와 그 다음 리스트가 포함한 원소의 index , ... 마지막 리스트의 원소 index 이런식으로 접근할 수 있습니다.

intList = [1, 2, 3, 4, 5]
        # [0][1][2][3][4]
mergedList = ["reakwon", "tistory", "com",intList]
            #   [0]         [1]      [2]    [3]

print(mergedList[0], mergedList[1], mergedList[2], mergedList[3][0], mergedList[3][1], mergedList[-1][-1])
reakwon tistory com 1 2 5

 

4. 리스트의 반복

리스트를 반복하고 싶으면 * 연산자를 사용해서 반복할 횟수를 적어주면 됩니다.

ls = ['-','=']
repeat = ls * 5
print (repeat)
['-', '=', '-', '=', '-', '=', '-', '=', '-', '=']

 

5. 리스트의 내장 함수

리스트는 인덱스 접근, 변경, 삭제가 가능할뿐만 아니라 때에 따라 맞게 사용할 수 있는 함수를 내장하고 있습니다. 여기서 어떤 함수들이 있나 살펴보도록 하겠습니다.

 

리스트의 길이 - len

리스트의 내장함수는 아닌데, 리스트의 길이를 구하고 싶을때는 len 함수를 사용하여 구할 수 있습니다.

numbers = [5, 2, 3, 5, 6, 7, 1, 1, 1]   #9개 원소

print ("numbers 길이 : ", len(numbers))
numbers 길이 :  9

 

정렬 - sort

리스트는 sort 함수 한번으로 원소를 정렬할 수 있습니다. 이때 주의할 점은 리스트 내의 자료형은 같은 자료형이어야합니다. 정수형, 문자열을 섞어서 사용할 수는 없습니다. 숫자일때 기본 정렬은 오름차순, 문자열일때 정렬은 기본 사전순이 됩니다. 이때 대소문자를 구분하여 대문자가 먼저 나옵니다. 이유는 소문자의 ASCII코드보다 대문자가 더 작은 코드이기 때문이죠.

numbers = [5, 2, 3, 5, 6, 7, 1, 1, 1]
strs = ['apple', 'computer', 'python', 'list', 'C++','Java', 'banana']

numbers.sort()  #정수 정렬
strs.sort()     #문자열 정렬

print(numbers)
print(strs)

 

[1, 1, 1, 2, 3, 5, 5, 6, 7]
['C++', 'Java', 'apple', 'banana', 'computer', 'list', 'python']

 

리스트의 순서를 거꾸로 저장 - reverse

리스트 순서를 거꾸로 만들고 싶다면 reverse를 이용해서 순서를 거꾸로 만들 수 있습니다. 이를 응용해서 위의 정렬된 리스트를 내림차순으로 만들고 싶다면 sort 이후 reverse를 사용하면 되겠죠?

numbers = [5, 2, 3, 5, 6, 7, 1, 1, 1]

numbers.sort()  #정수 정렬
numbers.reverse()   #거꾸로 뒤집은 리스트

print(numbers)
[7, 6, 5, 5, 3, 2, 1, 1, 1]

 

리트스에 포함된 원소의 갯수 - count

혹시 리스트에 우리가 찾는 값이 있는지, 있다면 몇개나 존재하는지 확인하고 싶다고 한다면 count 함수를 사용하면 됩니다.

numbers = [30, 19, 100, 34, 123, 51, 0, 0, -1]
strings = ['java', 'python', 'programming', 'algorithm', 'null', 'null']

print ('0은 몇개? :', numbers.count(0))
print ('null은 몇개? :', strings.count('null'))

0은 몇개? : 2
null은 몇개? : 2

 

마지막에 요소 추가 - append

append는 덧붙이기라는 뜻이 있어 보통 파일에 덧붙이기로 열때 옵션으로 'a'를 사용하는 것도 파일에 추가 기록하기 위함입니다. 기존의 원소를 삭제하지 않고 마지막에 추가합니다

ls = ['hello','world']

ls.append('!!')
ls.append('This')
ls.append('is')
ls.append('python')
print (ls)
['hello', 'world', '!!', 'This', 'is', 'python']

 

리스트를 끝에 추가하는 것도 가능합니다.

animals = ['dog', 'cat', 'orca']

animals.append(['monkey','elephant'])

print(animals)
['dog', 'cat', 'orca', ['monkey', 'elephant']]

 

리스트의 확장 - extend

append에서 끝에 리스트를 추가할 수 있었는데 이를 접근하려면 중첩 인덱싱을 사용해야합니다. 이렇게 말고 아예 원소들 자체를 리스트에 포함시키고 싶을때는 extend를 활용하여 달성할 수가 있습니다. extend는 반드시 리스트 자료형을 전달받습니다.

 

animals = ['dog', 'cat', 'orca']

animals.extend(['monkey','elephant'])

print(animals)
print(animals)

 

중간에 요소 삽입 - insert

마지막이 아니라 중간 어느 지점에 원소를 추가하려면 insert 함수를 사용하면 됩니다. 어느 위치에 삽입 어떤 데이터를 삽입할 것이냐를 알아야하기 때문에 인자를 2개받습니다.

www = ['world','web']

www.insert(1,'wide')    # 1번째에 'wide' 원소 추가
print(www)

 

append와 같이 중간에 리스트 자체를 추가할 수도 있습니다.

PS4Titles = ['WWZ', 'Tekken','GTA','Red Dead Redemption', 'FIFA']
PS4Titles.insert(2,['The Last Of Us Part 1', 'The Last Of Us Part Golf'])

print(PS4Titles)
['WWZ', 'Tekken', ['The Last Of Us Part 1', 'The Last Of Us Part Golf'], 'GTA', 'Red Dead Redemption', 'FIFA']

 

원소 삭제 - remove

원소를 삭제하려면 remove를 사용해서 삭제할 수 있습니다. 이때 인덱스가 아닌 원소 자체를 넘겨줘야합니다.

countries = ['korea','japan','china','US','UK','france','vietnam']

countries.remove('japan')
countries.remove('china')

print(countries)
['korea', 'US', 'UK', 'france', 'vietnam']

 

혹은 리스트 자체를 삭제할 수도 있습니다. 

countries = ['korea',['japan','china'],'US','UK','france','vietnam']

countries.remove(['japan','china'])

print(countries)
['korea', 'US', 'UK', 'france', 'vietnam']

 

원소 전부 삭제 - clear

리스트의 내용을 전부 비워내고 싶다면 clear 함수를 사용할 수 있습니다. 허나 del로도 같은 기능을 할 수 있습니다.

www = ['world','web']

www.clear() #del www[:]와도 같은 동작

print (www)
[]

 

원소를 가져온 후 삭제 - pop

pop은 원소를 가져오고 난 이후에 리스트에 삭제하는 기능을 합니다. 만약 아무런 인자를 넘겨주지 않는 경우 마지막 원소를 가져오고 리스트에서 삭제하고, 그렇지 않고 인덱스를 넘겨주면 그 인덱스의 원소를 가져온 후 삭제합니다.

countries = ['korea','japan','US','UK','france','vietnam', 'china']

countries.pop()     #마지막 원소 삭제
countries.pop(1)    #1번 원소 삭제

print(countries)
['korea', 'US', 'UK', 'france', 'vietnam']

 

원소의 인덱스 찾기 - index

값이 어느 인덱스에 저장되어있는지 확인하려면 index를 사용하여 확인할 수 있습니다. 가장 1번째는 찾을 값이 주어지집니다. 이후 다른 인자가 없다면 전체 리스트를 검색하여 찾아냅니다. 그렇지 않고 시작 인덱스와 끝 인덱스를 지정하여 찾아낼 수도 있습니다. 

languages = ['C++', 'Java', 'Python', 'C', 'C#', 'Kotlin']

print (languages.index('C++'))
print (languages.index('Kotlin',0,4))

0
Traceback (most recent call last):
  File "C:\Users\grjwu\PycharmProjects\pythonProject1\main.py", line 5, in <module>
    print (languages.index('Kotlin',0,4))
ValueError: 'Kotlin' is not in list

 

만약 인덱스를 찾아올 수 없다면 위의 에러를 만나게 되죠.

간단하게 리스트를 파이썬에서 어떻게 활용하는지 확인해보았습니다.

 

반응형
블로그 이미지

REAKWON

와나진짜

,