C언어 배열과 파이썬 리스트에는 몇 가지 차이점이 있다.
1. 정적, 동적 할당
- C 언어의 배열은 정적으로 할당된다. 프로그램이 실행될 때 배열의 크기가 결정되고,
이 크기는 실행 중에 변경할 수 없다.
#include <stdio.h>
int main() {
int a[10] = {0, };
a[4] = 5;
a[3] = 7;
// a[11] = 8; 에러!
return 0;
}
- 파이썬의 리스트는 동적으로 할당된다. 즉, 리스트를 만들 때 크기를 지정할 필요가 없으며,
필요에 따라 크기가 자동으로 조정된다.
# 빈 리스트 생성
dynamic_list = []
# append() 함수를 사용하여 요소를 추가
dynamic_list.append(1)
dynamic_list.append(2)
dynamic_list.append(3)
# 리스트의 길이 출력
print("리스트의 길이:", len(dynamic_list)) # 출력: 3
# 리스트 출력
print("리스트:", dynamic_list) # 출력: [1, 2, 3]
# 요소 삭제
dynamic_list.remove(2)
# 리스트 출력
print("리스트:", dynamic_list) # 출력: [1, 3]
# 요소 추가
dynamic_list.append(4)
# 리스트 출력
print("리스트:", dynamic_list) # 출력: [1, 3, 4]
2. 데이터 유형의 제한
- C 언어의 배열은 일반적으로 동일한 데이터 유형만을 포함한다.
예를 들어, 정수 배열에는 정수 값만 포함된다.
#include <stdio.h>
int main() {
int a[10] = {0, };
a[4] = 5;
// a[3] = "Test"; 에러!
return 0;
}
- 파이썬의 리스트는 여러 가지 데이터 유형을 혼합하여 포함할 수 있다.
예를 들어, 정수, 문자열, 부동 소수점 등을 함께 포함할 수 있다.
mixed_list = [1, "hello", 3.14, True, [5, 6, 7]]
print(mixed_list) # 리스트 전체 출력
print(mixed_list[0]) # 정수 출력
print(mixed_list[1]) # 문자열 출력
print(mixed_list[2]) # 부동 소수점 출력
print(mixed_list[3]) # 부울 값 출력
print(mixed_list[4]) # 내부 리스트 출력
3. 메모리 연속성
- C 언어의 배열은 메모리를 연속적으로 할당한다.
예를 들면 int형 a[0]의 메모리 주소가 100이라면 a[1]은 104다. - 파이썬의 리스트는 메모리를 연속적으로 할당하지 않는다.
그렇기 때문에 파이썬에서는 메모리 주소는 애초에 이용하지 않지만 메모리 주소를
알고 있다 해도 파이썬 리스트에서는 다음 요소의 주소를 알 수 없다.
4. 인덱싱 및 슬라이싱
- C 언어의 배열은 0부터 시작하는 인덱스를 사용하여 요소에 접근한다.
#include <stdio.h>
int main(){
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("a의 1번째 요소 : %d", a[0]);
printf("a의 2번째 요소 : %d", a[1]);
printf("a의 3번째 요소 : %d", a[2]);
// printf("%d", a[-1]); 사용 불가!
return 0;
}
- 파이썬의 리스트는 양수 및 음수 인덱스를 모두 지원하며, 슬라이싱과 같은
편리한 기능을 제공하여 부분 리스트를 추출할 수 있다.
# 리스트 생성
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 음수 인덱스를 사용하여 리스트의 끝에서부터 요소에 접근
print("끝에서부터 첫 번째 요소:", my_list[-1])
print("끝에서부터 두 번째 요소:", my_list[-2])
print("끝에서부터 세 번째 요소:", my_list[-3])
print("끝에서부터 네 번째 요소:", my_list[-4])
print("끝에서부터 다섯 번째 요소:", my_list[-5])
# 양수 인덱스를 사용하여 부분 리스트 추출
positive_slice = my_list[2:7]
print("양수 인덱스를 사용한 슬라이싱:", positive_slice)
# 음수 인덱스를 사용하여 부분 리스트 추출
negative_slice = my_list[-8:-3]
print("음수 인덱스를 사용한 슬라이싱:", negative_slice)
# 양수와 음수 인덱스를 함께 사용하여 부분 리스트 추출
mixed_slice = my_list[3:-2]
print("양수와 음수 인덱스를 혼용한 슬라이싱:", mixed_slice)
'자료구조' 카테고리의 다른 글
스택 코드와 PUSH, POP 과정 (학교 과제, p56) (0) | 2024.04.16 |
---|---|
자료 구조의 분류 (p17) (0) | 2024.04.15 |
[이전 완] 파이썬 배열 코드 예시(학교 과제, p45) (0) | 2024.04.14 |
[이전 완] 크기와 종류 (학교 과제, p45) (0) | 2024.04.09 |
정보의 특징 (p14) (0) | 2024.04.08 |