용어/Differences by language

[Python/JAVA] 파이썬 리스트 자료형 이해하기, 자바와 비교

줌인. 2024. 6. 26. 15:48
파이썬, 자바, 자바스크립트 모두 문자열과 정수를 직접 더할 수 없다.

 

 

▶ 리스트 및 배열 구분, 이해하기

https://zoooom-in.tistory.com/136

 

[Python/JAVA/JS] 자바/자바스크립트의 배열과 파이썬의 리스트, 문자열 관계 이해하기

[공통점]공통점1️⃣ 순차적 데이터 저장 모든 언어에서 배열과 리스트는 데이터를 순서대로 저장2️⃣ 인덱스 접근 각 데이터는 0부터 시작하는 인덱스를 사용하여 접근할 수 있음3️⃣ 다양한

zoooom-in.tistory.com

 

▶ 다차원 배열, 중첩 배열/리스트 이해하기

https://zoooom-in.tistory.com/137

 

[Python/JAVA/JS] 다차원 배열, 중첩 배열/리스트

중첩 배열 / 리스트란? 배열 / 리스트 안에 또 다른 배열 / 리스트를 포함하는 자료 구조다차원 데이터를 표현하거나 복잡한 관계를 나타내는 데 유용  자바(Array)자바스크립트(Array)파이썬(list)

zoooom-in.tistory.com

 

0️⃣ 파이썬, 자바, 자바스크립트 모두 문자열과 정수를 직접 더할 수 없음

파이썬 자바 자바스크립트
- 정수를 문자열로 변환 - 문자열과 정수를 연결하려면 + 연산자 사용
- String.valueOf() 메서드를 사용하여 정수를
  문자열로 변환
- 동적 타이핑 언어이므로 암묵적인
  형 변환을 허용
num = 10
string = "Hello"

# TypeError 발생
# result = string + num

# 정수를 문자열로 변환하여 연결
result = string + str(num)  
print(result)  # "Hello10"
int num = 10;
String string = "Hello";

// 문자열 연결
String result1 = string + num;  // "Hello10"
String result2 = string + String.valueOf(num);  // "Hello10"
let num = 10;
let string = "Hello";

let result = string + num;  // "Hello10"

 

 

 

1️⃣ 리스트(배열) 내부 복사하기 ⇒ 파이썬 리스트 슬라이싱

Python Java
string[start:end] : list 사용, 기본 변수에 담기
- 슬라이싱 기법
새로운 배열 생성 후, 옮겨 담는 코드 작성
a = [1,2,3,4,5]
b= a[0:2] #기존과 슬라이싱 기법은 동일
print(b)
    //배열 내용 옮기기
    int[] ar = new int[3];
    ar[0] = 1;
    ar[1] = 2;
    ar[2] = 3;
       
       
    int [] br = new int[3];
    for(int i=0; i < br.length;i++) {
        br[i] = ar[i];
    }

▶ 자바스크립트는 어떨까?

더보기

.slice() 메서드를 활용해서 부분 추출 후 복사

const arr1 = [1, 2, 3, 4, 5];
const arr2 = arr1.slice(1, 4); // 인덱스 1부터 4 이전까지 복사

console.log(arr1); // [1, 2, 3, 4, 5]
console.log(arr2); // [2, 3, 4]

 

 

2️⃣ 리스트(배열) 연산 == 리스트 합치기

Python Java
string[] + string[] : 리스트끼리 병합 새로운 배열 생성 후, 옮겨 담는 코드 작성
#리스트 연산
a = [1, 2, 3, 4]
b = [5, 6, 7]
print(a+b) #리스트가 합쳐짐
//배열 합치기
int [] ar = new int[3];
ar[0] = 1;
ar[1] = 2;
ar[2] = 3;
       
int [] br = new int[2];
br[0] = 4;
br[1] = 5;
       
//새로운 배열 생성
int [] cr = new int[ar.length + br.length];
for(int i=0; i<cr.length;i++) {
   if(i < 3) {
      cr[i] = ar[i];
    } else {
      cr[i] = br[i-3];
    }
}

자바의 ArrayList 사용시, 가변적 리스트 특성상 다른 리스트의 요소를 유동적으로 추가할 수 있음

더보기

ArrayList.asList를 사용해서 초기화와 동시에 내부적 배열 생성

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5));

list1.addAll(list2);
System.out.println(list1); // [1, 2, 3, 4, 5]

- .addAll 메서드를 활용해서 리스트 내부값 모두를 추가

자바의 Arraycopy()메서드를 사용해서 배열의 내부를 복사할 수 있음

더보기

※ System.arrayCopy 메서드 

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
- src : 원본 배열
- srcPos : 원본 배열에서 복사를 시작할 위치
- dest : 복사된 요소가 저장될 배열
- desPos : 대상 배열에서 복사를 시작할 위치
- length : 복사할 요소의 수

 

int[] ar = {1, 2, 3};
int[] br = {4, 5};

int[] cr = new int[ar.length + br.length];
System.arraycopy(ar, 0, cr, 0, ar.length);
System.arraycopy(br, 0, cr, ar.length, br.length);

// cr 출력
System.out.println(Arrays.toString(cr));       // [1, 2, 3, 4, 5]

- Arrays.toString 메서드는 배열의 요소를 문자열로 변환하여, 배열의 내용을 보기 쉽게 출력할 수 있도록 함

▶ 자바스크립트는 어떨까?

더보기

1️⃣ .concat() 메서드 사용 : 두 개 이상의 배열을 합쳐서 새로운 배열을 반환

const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const combined = arr1.concat(arr2);

console.log(combined); // [1, 2, 3, 4, 5]

 

2️⃣.push() 메서드 사용 : 기존 배열을 수정해서 다른 배열의 요소 추가

const arr1 = [1, 2, 3];
const arr2 = [4, 5];
arr1.push(...arr2);

console.log(arr1); // [1, 2, 3, 4, 5]

※ 얕은 복사, push(한가지) 만을 진행할 수도 있음

스프레드 연산자 ... : 배열/객체를 개별 요소로 확장하여 함수 호출, 배열/객체 결합, 복사 등에 매우 유용하게 사용

 

 

 

3️⃣ 리스트 수정

파이썬 자바 자바스크립트
배열에 인덱스를 사용하여 직접 접근하여 요소를 수정
#리스트 수정
a = [1, 2, 3, 4, 5]
a[2] = 4  #손쉽게 변경 가능 
print(a)
int [] ar = {1,2,3,4,5};
ar[2] = 4;
for(int i = 0; i < ar.length ; i++) {
    System.out.println(ar[i]);
}
let a = [1, 2, 3, 4, 5];
a[2] = 4;
console.log(a); // [1, 2, 4, 4, 5]

 

 

 

4️⃣ 리스트 내부 '값' 추가

파이썬 자바 자바스크립트
str.append() : .append 메서드 활용  배열 크기 변경 불가 string.push() : push 메서드 활용
a = [1, 2, 3, 4, 5]
a.append(6)
print(a)
 
let a = [1, 2, 3, 4, 5];
a.push(6);
console.log(a);

※ 단 Java에서 ArrayList를 이용해서 해당 문제 해결 : .add() 메서드 활용

ArrayList<Integer> ar = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
ar.add(6);
System.out.println(ar);

 

 

4️⃣-1️⃣ 리스트 '중간 요소 삽입'

파이썬 자바 자바스크립트
str.insert() : .insert 메서드 활용  배열 크기 변경 불가 string.splice() : splice 메서드 활용
a = [1, 2, 3]
a.insert(0,99);
print(a)
 
let a = [1, 2, 3];
a.splice(0, 0, 99); // 첫 번째 인덱스에 99를 삽입
console.log(a); // [99, 1, 2, 3]

- splice(첫번째 인덱스, 제거할 요소의 수, 삽입할 요소)

 Java에서 ArrayList를 이용해서 해당 문제 해결 : .add(위치, 삽입할 숫자)

a.add(0, 99); // 첫 번째 인덱스에 99를 삽입

 

 

4️⃣-2️⃣ 리스트 내부 '리스트' 추가

파이썬 자바 자바스크립트
str.extend() : .extend 메서드 활용  배열 크기 변경 불가 string.push() : 동일하게 push 메서드 활용
a = [1, 2, 3, 4]
a.extend([5, 6, 7])
print(a)
 
let a = [1, 2, 3, 4];
a.push(6, 7, 8);
console.log(a);

※ 단 Java에서 ArrayList를 이용해서 해당 문제 해결 : .addAll() 메서드 활용

ArrayList<Integer> ar = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
ar.addAll(Arrays.asList(6, 7, 8));
System.out.println(ar);
더보기

※ ArrayList의 addAll 메서드

 다른 컬렉션의 모든 요소를 현재 리스트에 추가할 때 사용

 이 때, addAll 메서드는 Collection 타입의 인자를 받음

 ∴ 따라서 다음과 같이 ArrayList에 직접 요소를 열거하여 추가할 수는 없음

 

 

5️⃣ 리스트 삭제

파이썬 자바 자바스크립트
del str[] : del 메서드 활용  배열 크기 변경 불가 string.splice() : splice 메서드 활용
a = [1,2,3,4,5]
del a[2]
print(a)
 
let a = [1, 2, 3, 4, 5];
a.splice(2, 1); // 인덱스 2에서 1개의 요소 삭제
console.log(a); // [1, 2, 4, 5]

※ 단 Java에서 ArrayList를 이용해서 해당 문제 해결 : .remove()메서드 활용

ArrayList<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);
a.add(3);
a.remove(2);

 

 

5️⃣- 1️⃣ 특정 요소 삭제

파이썬 자바 자바스크립트
str.remove() : remove()메서드 활용 배열 크기 변경 불가 특정 요소 탐색 코드 작성
a.remove(5)
print(a)
 
let a = [1, 2, 3, 4, 5];
let index = a.indexOf(5);
if (index !== -1) {
    a.splice(index, 1);
}
console.log(a); // [1, 2, 3, 4]

※ 단 Java에서 ArrayList를 이용해서 해당 문제 해결 : .remove()메서드 활용 ⇒ 인덱스 및 요소 삭제 가능

ArrayList<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);
a.add(3);
a.remove(Integer.valueOf(3));
System.out.println(a); // [1, 2]

 

 

6️⃣ 리스트 정렬

파이썬 자바 자바스크립트
str.sort() : sort() 메서드 사용 배열 크기 변경 불가 string.sort() : 배열 객체의 sort() 메서드를 사용
a = [5, 4, 3, 2, 1]
a.sort()
print(a)
 
let a = [5, 4, 3, 2, 1];
a.sort();
console.log(a);

※ 단 Java에서 ArrayList를 이용해서 해당 문제 해결 : Collections.sort()메서드 활용

ArrayList<Integer> ar = new ArrayList<>(Arrays.asList(5, 4, 3, 2, 1));
Collections.sort(ar); // ArrayList 정렬

 

 

7️⃣ 인덱스 반환

파이썬 자바 자바스크립트
str.index(찾을 요소) : index()메서드 활용 배열 순회 string.indexOf(찾을요소) : indexOf() 메서드 활용 
#인덱스 반환
a = [1,2,3]
print(a.index(3))
int[] a = {1, 2, 3};
int target = 3;

int index = -1;
for (int i = 0; i < a.length; i++) {
    if (a[i] == target) {
        index = i;
        break;
    }
}
let a = [1, 2, 3];
let index = a.indexOf(3);
console.log(index);

 

 

🔢문자열과 동일하게 list 반복, count등 메서드 사용 가능..

 

 

728x90