자료구조

C언어 배열과 파이썬 리스트 차이점 (학교 과제, p48)

치즈샌드CS 2024. 4. 14. 15:22

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)