웹사이트 검색

Python 목록 데이터 구조 알아보기 - 1부


데이터 구조는 데이터 유형, 유형 간의 관계, 데이터에 적용할 수 있는 기능 또는 작업의 모음입니다. 데이터 유형은 문자열, 정수, 부동 값 등이 될 수 있습니다.

변경 가능/불변 객체의 차이점은 무엇입니까?
변경 가능한 객체
  1. 요소 추가, 업데이트 또는 삭제와 같이 생성된 후 상태가 변경될 수 있는 객체입니다.
  2. Lists, Dictionary, Set, bytearray는 Python에서 변경 가능한 객체 유형입니다.
불변 객체
  1. 개체 상태는 수정할 수 없습니다. 객체가 생성되면 요소를 추가, 제거 또는 업데이트할 수 없습니다.
  2. String, Integer, Tuples, Frozenset은 Python에서 변경할 수 없는 객체 유형 중 일부입니다.
동종/이종 데이터 구조의 차이점은 무엇입니까?
  1. 동질적인 데이터 구조 – 데이터 요소는 동일한 데이터 유형(예: 배열)을 갖습니다.
  2. 이기종 데이터 구조 – 데이터 요소는 동일한 데이터 유형이 아닐 수 있습니다(예: 목록, 튜플, 세트 등...).
기본 데이터 유형과 비기본 데이터 유형이란 무엇입니까?

내장 데이터 구조의 기능을 이해하기 전에 데이터 구조 객체와 함께 사용되는 몇 가지 내장 함수를 살펴보겠습니다.

  • dir(obj) – 속성과 메소드를 반환하는 내장 함수입니다.
  • len(obj) – 객체의 길이(항목 수)를 반환합니다. 인수는 시퀀스(예: 문자열, 바이트, 튜플, 목록 또는 범위) 또는 컬렉션(예: 사전, 세트 또는 고정 세트)일 수 있습니다.
  • del – 이 내장 키워드는 네임스페이스에서 개체를 삭제하거나 목록, 사전 등과 같은 개체에서 항목을 제거하는 데 사용됩니다.
  • type(obj) – type() 함수는 객체의 유형을 반환하거나 전달된 인수를 기반으로 새로운 유형의 객체를 반환합니다.
  • id() – 이 함수는 객체의 'ID'를 반환합니다. 이는 해당 개체의 수명 동안 이 개체에 대해 고유하고 상수가 보장되는 정수입니다.

이제 몇 가지 중요한 세부 사항을 확인했으므로 Python 데이터 구조를 계속 진행하겠습니다.

Python에는 데이터 구조가 내장되어 있으며 사용자는 자신의 데이터 구조를 정의할 수 있습니다. 내장된 데이터 구조에는 LIST, DICTIONARY, TUPLESET이 포함됩니다. 사용자 정의 데이터 구조의 예로는 STACK, QUEUES, TREE, HASHMAP 등이 있습니다.

다른 프로그래밍 언어를 사용하는 사람들은 배열 유형에 매우 익숙할 것입니다. 하지만 파이썬에서는 그런 일이 흔하지 않습니다.

여기서 목록은 배열과 비슷하지만 목록을 사용하면 모든 데이터 유형(이기종)의 값을 저장할 수 있는 반면 배열은 특정 유형(int, float 등…)의 데이터만 보유할 수 있습니다. 배열을 사용하려면 "array" 모듈에서 명시적으로 배열을 가져와야 합니다.

Python 시리즈 기사에서는 데이터 구조Python 내장 데이터 구조가 무엇인지 살펴보겠습니다.

목록

목록은 다양한 데이터 유형의 모음인 데이터 구조입니다. '다양한 데이터 유형의 수집'은 무엇을 의미하나요? 목록은 문자열, 정수, 부동 소수점 값, 중첩 목록 등을 저장할 수 있습니다.

목록 개체는 "변경 가능"입니다. 이는 목록 내에 생성된 항목에 액세스, 수정 또는 삭제할 수 있음을 의미합니다. 목록 지원 인덱싱. 목록의 각 항목은 주소에 할당되며 해당 주소를 사용하여 특정 항목 값에 액세스하거나 수정할 수 있습니다.

  • 목록 만들기
  • 목록 삽입/액세스/수정
  • 목록 삭제

목록 만들기

목록은 대괄호를 사용하여 만들 수 있습니다.

>>> name_empty = []			# Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# list with string data type
>>> name_int = [1,2,3]			# list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14]	# list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]

내장된 type() 함수를 사용하여 객체 유형을 확인할 수 있습니다.

>>> type(name)

dir() 함수를 사용하여 list 인스턴스의 메서드속성에 액세스할 수 있습니다.

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

len() 메소드를 사용하여 목록의 총 항목 수를 확인할 수 있습니다.

>>> len(name)

list.copy() 메소드를 사용하여 기존 목록에서 새 목록을 만들 수 있습니다.

>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

목록 삽입/액세스/수정

list.insert(i, x) 메소드를 사용하면 목록의 어느 위치에나 항목을 삽입할 수 있습니다.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom')	# Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# Tom is inserted at the 0th position.

list.append(x) 메소드를 사용하여 목록에 단일 항목을 추가할 수 있습니다. 그러면 항목이 목록 끝에 삽입됩니다.

>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']

list.extend() 메서드를 사용하여 목록에 여러 항목을 추가할 수 있습니다.

>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']

'+' 연산자를 사용하여 두 목록을 결합할 수도 있습니다. 두 목록 모두 서로 다른 데이터 유형일 수 있습니다.

>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']

이미 언급한 바와 같이 목록 객체는 변경 가능합니다. 목록 항목은 인덱스 위치를 참조하고 값을 할당하여 수정할 수 있습니다.

>>> name									# Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name									# After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

목록은 양수 색인 생성과 음수 색인 생성을 모두 지원합니다.

색인 생성은 0에서 시작하고 음수 색인 생성은 -1에서 시작합니다.

인덱스 위치를 사용하여 목록 항목에 액세스할 수 있습니다.

>>> name[0]			# Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1]			# Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'

또한 슬라이싱을 사용하여 목록의 항목에 액세스할 수도 있습니다. 슬라이싱을 사용하면 시작, 종료, 단계 매개변수를 정의하여 다양한 항목에 액세스할 수 있습니다.

SYNTAX: list[starting position, ending position, Step]

>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']

list.count(x) 메소드를 사용하여 특정 값의 발생 횟수를 확인할 수 있습니다.

>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3

list.index(x[, start[, end]]) 메소드를 사용하여 특정 항목의 인덱스 위치를 찾을 수 있습니다.

>>> name			# Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will)	# Returns the index position of first occurence of x.
0
>>> name.index('Will',2)	# Starting index positon’2’ is given.
7
>>> name.index('Will',2,4)	# Starting and Ending Index position is given. Since there is no 					occurence of ‘Will’ within the given search position it will throw 					Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in 
ValueError: 'Will' is not in list

list.reverse() 메서드를 사용하여 목록의 항목을 반전할 수 있습니다.

>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']

목록 삭제

list.pop(x) 메소드를 사용하여 목록의 x 위치에 있는 항목을 제거할 수 있습니다. 이 기능은 목록에서 항목을 제거하고 제거된 항목을 표시합니다. x가 지정되지 않은 경우 pop() 메서드는 목록의 마지막 항목을 반환합니다.

>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'

list.remove (x) 메소드를 사용하여 목록에서 항목을 제거할 수도 있습니다. 여기서 x는 항목의 값을 가져와서 x가 목록에 없으면 ValueError를 발생시킵니다.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: list.remove(x): x not in list

목록 이름을 대괄호에 지정하거나 list.clear() 메서드를 사용하여 목록을 비울 수 있습니다.

>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []			
>>> name
[]
>>> name1.clear()		
>>> name1
[]

목록을 비우거나 목록에서 항목을 제거하기 위해 목록 메서드를 사용하는 대신 내장 키워드 del를 사용하여 이 작업을 수행할 수 있습니다. “del” 키워드는 메모리에서 목록 개체를 삭제하거나 목록에서 항목을 삭제하거나 조각에서 항목을 삭제할 수 있습니다.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]

내장된 id() 함수는 개체의 "identity"를 반환합니다. 이는 해당 객체의 수명 동안 고유하고 상수가 보장되는 정수입니다.

>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'name' is not defined

참고: del()을 사용하여 메모리에서 목록 변수를 제거했기 때문에 이름 오류가 발생합니다.

help() funtion:

내장된 도움말 function()은 특정 개체나 해당 개체의 메서드에 대한 세부 정보를 얻는 데 매우 유용합니다.

help(object)
help(object.method)
요약

지금까지 이 문서에서는 목록 데이터 구조를 사용하여 목록 메소드를 사용하여 목록 객체를 저장, 액세스, 수정, 삭제하는 방법을 살펴보았습니다. 또한 id(), dir(), type(), help()<와 같은 일부 내장 함수도 확인했습니다. 매우 효과적인 기능입니다. 또한 목록을 생성하는 더 간결하고 읽기 쉬운 방법을 제공하는 Python의 목록 이해 기능도 있습니다.