5장: 파이썬 기본 데이터 구조 - 목록
시퀀스는 Python에서 가장 기본적인 데이터 구조입니다.
시퀀스의 각 값에는 인덱스라고 하는 해당 위치 값이 있으며 첫 번째 인덱스는 0, 두 번째 인덱스는 1 등입니다.
Python에는 시퀀스에 대한 6가지 기본 제공 유형이 있지만 가장 일반적인 유형은 목록과 튜플입니다.
목록에서 수행할 수 있는 작업에는 인덱싱, 슬라이싱, 추가, 곱하기 및 구성원 확인이 포함됩니다.
또한 Python에는 시퀀스의 길이를 결정하고 가장 큰 요소와 가장 작은 요소를 결정하는 내장 메서드가 있습니다.
목록은 가장 일반적으로 사용되는 Python 데이터 유형이며 대괄호로 묶인 쉼표로 구분된 값으로 나타날 수 있습니다.
목록의 데이터 항목은 동일한 유형을 가질 필요가 없습니다.
1. 리스트 생성
-
목록이 무엇입니까
- 시퀀스는 파이썬에서 가장 기본적인 데이터 구조 입니다 .
-
목록이 왜 필요한가요?
- 변수는 하나의 요소를 저장할 수 있고 목록은 N개 이상의 요소를 저장할 수 있는 "큰 컨테이너" 이며 프로그램은 이러한 데이터를 전체적으로 쉽게 처리할 수 있습니다.
-
목록은 다른 언어의 배열과 동일합니다.
-
목록의 특징
- 순서대로 정렬된 목록 요소
- 하나의 데이터만 인덱스 매핑
- 목록은 중복 데이터를 저장할 수 있습니다.
- 모든 데이터 유형의 혼합 스토리지
- 필요에 따라 동적으로 메모리 할당 및 회수
-
목록 다이어그램
- 정방향 인덱스
- 역지수
-
목록 생성
목록을 만들려면 쉼표로 구분된 여러 데이터 항목을 대괄호로 묶으 십시오.
- 대괄호 사용
- 내장 함수 list() 호출
-
코드 데모
list = ["hello", "Python", "World"]
print(id(list))
print(type(list))
print(list)
list2=list(["hello",87,"YWHh"])
print(list2)
2. 목록 조회 작업
2.1 목록에서 지정된 요소의 인덱스 가져오기
- 목록에 N개의 동일한 요소가 있음을 알고 있으면 동일한 요소의 첫 번째 요소만 반환합니다.
- 쿼리된 요소가 목록에 없으면 ValueError가 발생합니다.
- 지정된 시작과 중지 사이를 쿼리할 수도 있습니다.
lst = ["hello", "world", 98, "hello"]
# 如果列表中有相同元素,只返回列表中的第一个元素
print(lst.index("hello"))
# print(lst.index("1111")) 元素不存在
# 指定范围查找
print(lst.index("hello", 1, 4))
2.2 목록에서 단일 요소 가져오기
- 0에서 N-1까지 정방향 인덱스
- -N에서 -1로 역 인덱스
- 지정된 색인이 존재하지 않으며 IndexError가 발생합니다.
lst = ["hello", "world", 98, "hello"]
# 正向索引:获取索引为2的元素
print(lst[2])
# 逆向索引:获取索引为-2的元素
print(lst[-2])
# 索引不存在
# print(lst[-99])
2.3 목록에서 여러 요소 가져오기
- 문법적 형식
列表名[start : stop : step ]
- 슬라이스 작업
슬라이스 작업 | 말씨 | 설명하다 |
---|---|---|
슬라이싱한 결과 | 원본 목록 조각의 복사본 | |
슬라이스 범위 | [ 시작 멈춤 ] | 왼쪽 닫힘 오른쪽 열림 |
단계 크기의 기본값은 1입니다. | [ 시작 : 중지 ] 또는 [ 시작 : 중지 : ] | |
단계가 양수일 때 처음부터 시작하여 뒤로 자릅니다. | [ : 정지 : 단계] | 슬라이스의 첫 번째 요소는 기본적으로 목록의 첫 번째 요소입니다. |
[ 시작 : : 단계] | 슬라이스의 마지막 요소는 기본적으로 목록의 마지막 요소입니다. | |
단계가 음수일 때 처음 부터 잘라 냄 | [ : 정지 : 단계] | 슬라이스의 첫 번째 요소는 기본적으로 목록의 마지막 요소입니다. |
[ 시작 : : 단계] | 슬라이스의 마지막 요소는 기본적으로 목록의 첫 번째 요소입니다. |
- 코드 데모
# 切片操作
lst = [10, 20, 30, 40, 50, 60, 70, 80]
# 打印输出:start=1,stop=6,step=1,产生新列表
print(lst[1:6:1])
print("原列表",id(lst))
print("切列表",id(lst[1:6:1]))
# 默认步长为1
print(lst[1:6])
print(lst[1:6:])
# 正向切片
print(lst[:6:2])
print(lst[1::2])
# 逆向切片
lst = [10, 20, 30, 40, 50, 60, 70, 80]
print(lst[::-1])
print(lst[6:1:-1])
print(lst[:1:-1])
print(lst[6::-1])
2.4 지정된 요소가 목록에 있는지 확인
- 문법적 형식
元素 in 列表名
元素 not in 列表名
- 코드 데모
lst = [10, 20, "Python", "Hello"]
print(10 in lst)
print(100 in lst)
print("Hello" in lst)
print("java" in lst)
2.5 목록 요소 순회
- 문법적 형식
for 迭代变量 in 列表名 :
操作
- 코드 데모
lst = [10, 20, "Python", "Hello"]
# 将列表元素依次输出
for i in lst:
print(i)
3. 리스트 요소 연산 추가
- 작업 방법 추가
방법/기타 | 작업 설명 |
---|---|
추가() | 새 개체를 생성하지 않고 목록 끝에 요소를 추가합니다. |
연장하다() | 목록 끝에 하나 이상의 요소 추가 |
끼워 넣다() | 목록의 아무 곳에나 요소 추가 |
일부분 | 목록의 아무 곳에나 하나 이상의 요소를 추가합니다. |
- 코드 데모
# append():向列表的末尾添加一个元素—最常用
lst = [10, 20, 30]
print("添加元素之前:", id(lst), lst)
lst.append(100)
print("添加元素之后:", id(lst), lst)
lst2 = ["hello", "world"]
# 将lst2作为一个元素添加到列表的末尾
lst.append(lst2)
print(lst)
# 将lst2元素依次添加到列表末尾
lst.extend(lst2)
print(lst)
# 在任意位置上添加一个元素
lst.insert(1, 90)
print(lst)
lst3 = [30, 40, "hello", "python"]
# 切片:在任意位置上添加N多个元素
lst[1::]=lst3
print(lst)
넷째, 목록 요소의 삭제 작업
- 작업 방법 추가
방법/기타 | 작업 설명 |
---|---|
제거하다() | 목록에서 요소 제거, 중복 요소가 있으면 첫 번째 요소만 제거, 목록 요소가 없으면 ValueError 예외 발생 |
팝() | 인덱스에 따라 요소를 제거하고 인덱스가 없으면 IndexError 예외가 발생합니다. |
일부분 | 하나 이상의 요소를 삭제하면 새 목록 개체가 생성됩니다. |
분명한() | 목록 지우기 |
의 | 목록 삭제 |
- 코드 데모
lst = [10, 20, 30, 40, 50, 60, 30]
print("原列表:", lst)
# remove():从列表中移除一个元素,如果有重复元素,只移除第一个
lst.remove(30)
print("原列表:", lst)
# 列表元素不存在,ValueError抛出异常
# lst.remove(100)
# pop():根据索引删除元素
lst.pop(2)
print(lst)
# 如果指定的索引位置不存在,将抛出IndexError异常
# lst.pop(50)
# 不写参数,会将列表中的最后一个元素删除
lst.pop()
print(lst)
# 切片:删除至少一个元素,将会产生一个新的列表对象
new_list = lst[1:3]
print("原列表:", id(lst), lst)
print("新列表:", id(new_list), new_list)
# 不产生新的列表对象,而是删除原列表中的内容
lst[1:3] = []
print(lst)
# clear():清除列表中的所有元素
lst.clear()
print(lst)
# del语句:删除列表
del lst
다섯, 목록 요소의 수정 작업
- 지정된 인덱스의 요소에 새 값을 할당합니다.
- 지정된 슬라이스에 새 값을 할당합니다.
- 코드 데모
list = [10, 20, 30, 40]
# 一次修改一个值
list[2] = 100
print(list) # [10, 20, 100, 40]
# 切片修改
list[1:3:] = [22, 33]
print(list)
6. 목록 요소의 정렬 작업
- 정렬 작업 방법
방법/기타 | 작업 설명 |
---|---|
종류() | sort() 메서드를 호출하면 목록의 모든 요소가 기본적으로 내림차순 으로 정렬됩니다. reverse=True를 지정하여 내림차순 으로 정렬하고 새 목록 객체를 생성하지 않고 원래 목록에서 작동 할 수 있습니다. |
정렬() | 내장 함수 sorted()를 호출하여 reserve=True를 지정하여 내림차순으로 정렬하면 원래 목록이 변경되지 않고 새 목록 객체가 생성됩니다. |
- 코드 데모
lst = [20, 40, 10, 98, 54]
print('排序前列表', lst) # 排序前列表 [20, 40, 10, 98, 54]
# 开始排序,调用列表对象的sort方法,默认是升序
lst.sort()
print('排序后列表', lst) # 排序后列表 [10, 20, 40, 54, 98]
lst.sort(reverse=True)
print('新排序列表', lst) # 新排序列表 [98, 54, 40, 20, 10]
lst.sort(reverse=False)
print('新排序列表', lst) # 新排序列表 [10, 20, 40, 54, 98]
# 使用内置函数sorted()对列表进行排序,将产生一个新的列表对象
lst2 = sorted(lst)
print(lst2) # [10, 20, 40, 54, 98]
lst2 = sorted(lst, reverse=True)
print(lst2) # [98, 54, 40, 20, 10]
일곱, 목록 생성
"목록 생성 공식"이라고 하는 목록 생성 공식
- 문법 구조
[ 表示列表元素的表达式 for 自定义变量 in 可迭代对象 ]
[ i*i for i in range(1,10) ]
- 코드 데모
lst = [i for i in range(1, 10)]
print(lst)
lst2 = [i * i for i in range(1, 10)]
print(lst2)