Python
추가 - append, insert
append
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> a.append([5,6])
>>> a
[1, 2, 3, 4, [5, 6]]
extend
>>> a = [1,2,3]
>>> a.extend([4,5])
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]
insert
0번째 자리, 즉 첫 번째 요소(a[0]) 위치에 값 4를 삽입하라는 뜻이다.
>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
리스트 a의 a[3], 즉 네 번째 요소 위치에 값 5를 삽입
>>> a.insert(3, 5)
>>> a
[4, 1, 2, 5, 3]
수정
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]
삭제 - del(index), remove(value), pop(index)
remove - count 로 확인후 사용
del, pop - len 확인후 사용
del
>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
remove
remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]
a가 3이라는 값을 2개 가지고 있을 경우 첫 번째 3만 제거되는 것을 알 수 있다.
>>> a.remove(3)
>>> a
[1, 2, 1, 2]
remove(3)을 한 번 더 실행하면 다시 3이 삭제된다.
pop
pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]
pop(x)는 리스트의 x번째 요소를 돌려주고 그 요소는 삭제한다.
>>> a = [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
그외
index
index(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려준다.
>>> a = [1,2,3]
>>> a.index(3)
2
>>> a.index(1)
0
위 예에서 리스트 a에 있는 숫자 3의 위치는 a[2]이므로 2를 돌려주고,
숫자 1의 위치는 a[0]이므로 0을 돌려준다.
다음 예에서 값 0은 a 리스트에 존재하지 않기 때문에 값 오류(ValueError)가 발생한다.
>>> a.index(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
count
count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수이다.
>>> a = [1,2,3,1]
>>> a.count(1)
2
Dart
선언
my_list는 크기 3짜리인 리스트인데, 이 리스트는 안 쓴다고 줄어들지 않고 더 쓰겠다고 늘어나지도 않는다.
0번부터 2번까지 쓸 수 있다.
var my_list = new List(3); // 크기 3짜리 리스트를 만듦
var your_list = List<int>.filled(5, 0); // 모든 원소가 0으로 초기화된 크기 5짜리 리스트를 만듦
가변 리스트는 런타임 동작 시 길이를 바꿀 수 있다.
자유롭게 길이를 정할 수 있는 리스트를 만들려면 다음과 같이 선언하면 된다.
var my_list2 = [1, 2, 3]; // 값과 함께 리스트를 초기화함
var my_list3 = new List(); // 길이가 0인 리스트를 만듦
var my_list4 = new List.empty(growable: true);
var my_list5 = List<int>.filled(5, 0, growable: true);
추가
하나의 값을 리스트 맨 마지막에 추가할 때는 add,
여러 개의 값을 한 번에 추가하려면 리스트에 담아 addAll 하면 된다.
my_list.addAll([6, 7, 8]);
my_list.add(9);
특정 위치에 원소를 삽입하고 싶다면 insert를 쓰면 된다.
insert()는 첫 번째에 인덱스, 두 번째에 삽입할 데이터를 써 준다.
insertAll을 해서 한 번에 여러 데이터를 삽입할 수도 있다.
my_list.insert(3, 3);
my_list.insertAll(1, [1, 2]);
수정
var my_list = List<int>.filled(5, 0, growable: true);
my_list[0] = 1;
my_list[4] = 5;
print(my_list[2]); // 0
print(my_list.first); // 1
print(my_list.last); // 5
삭제
var my_list2 = [1, 2, 3, 4, 5];
value로 삭제
remove는 bool 타입을 반환하는데, 해당하는 값이 있었고 잘 지워졌다면 true,
그렇지 않다면 false를 반환한다.
my_list.remove(0); //제일 먼저 등장하는 1 삭제
index로 삭제
그 다음 n번 인덱스의 원소 값이 무엇이든 그 인덱스 값을 지우고 싶다면 removeAt을 사용하면 된다.
removeAt은 지운 인덱스의 원소를 반환한다.
my_list.removeAt(3); // 3번 인덱스의 값(4)을 지운다.
마지막 원소를 지우고 싶다면 removeLast()를 쓸 수 있다. pop과 같은 연산이다.
removeLast 역시 방금 지운 원소를 반환한다.
my_list.removeLast();
어느 범위 사이의 원소를 삭제하고 싶을 수도 있다. 그럴 때는 removeRange를 사용할 수 있다.
removeRange는 start와 end 인덱스를 받아 start, end 사이의 원소를 모두 삭제한다.
아무것도 반환하지 않는다.
1번부터 3번 인덱스 전까지, 즉 1번과 2번 2개의 원소를 삭제한다.
my_list.removeRange(1, 3);
리스트의 전체 원소를 삭제하고 싶다면 clear()를 사용하면 된다.
리스트 안의 원소가 지워져 리스트는 길이가 0이 된다.
my_list.clear();
검색
리스트가 어떤 원소를 갖고 있는지 확인하고 싶다면, contains 메소드를 쓸 수 있다.
contains(value)를 하면 value가 들어있을 때 true, 그렇지 않을 때 false를 반환한다.
my_list5.contains(0); //true
리스트 안에 있는 원소 중 어떤 하나라도 주어진 조건을 만족하는지 알고 싶다면 any를 쓸 수 있다.
다음의 코드는 my_list의 원소 중 5가 넘는 값이 하나라도 있는지 확인하는 문장이다.
이와 같이 any 안에 bool 타입을 반환하는 함수를 써서 구현할 수 있다. every도 마찬가지다.
특이한 건 함수 안의 매개변수가 하나라도 반드시 괄호 ()로 감싸줘야 한다는 사실이다.
print(my_list5.any((x) => x > 5));
print(my_list5.every((x) => x < 6));
어떤 원소가 여러 개 있는 것 같을 때, 가장 왼쪽에 있는 값을 찾을 때는 indexOf를 쓸 수 있다.
해당 원소를 가진 제일 처음 나오는 인덱스 번호가 반환된다.
my_list5.indexOf(0);
마찬가지로 뒤에서부터 찾고 싶을 때는 lastIndexOf를 쓸 수 있다.
my_list5.lastIndexOf(0);
Golang(배열/슬라이스)
배열(고정길이)
package main
import "fmt"
func main() {
var arr_int [5]int
fmt.Println(arr_int)
fmt.Println(len(arr_int))
}
출력 결과는 다음과 같다.
[0 0 0 0 0]
5
package main
import "fmt"
func main() {
var arr_int [5]int
for i := 0; i < len(arr_int); i++ {
arr_int[i] = i
}
fmt.Println(arr_int[0])
}
결과는 다음과 같다.
0
package main
import "fmt"
func main() {
arr_int := [5]int{0, 1, 2, 3, 4}
for data := range arr_int {
fmt.Println(data)
}
}
슬라이스(가변길이)
package main
import "fmt"
func main() {
arr_int := []int{0, 0, 0, 0, 0}
arr_int := make([]int, 5)
fmt.Println(arr_int)
}
package main
import "fmt"
func main() {
arr_int := make([]int, 5, 10)
x := arr_int[0:10]
fmt.Println(arr_int)
fmt.Println(x)
}
추가 - 슬라이스만 추가 가능 / 배열은 추가 불가능
func main() {
arr_int := []int{1, 2, 3, 4, 5}
x := make([]int, 10)
y := make([]int, 3)
fmt.Println("x before copy: ", x)
fmt.Println("y before copy: ", y)
copy(x, arr_int)
copy(y, arr_int)
fmt.Println()
fmt.Println("x after copy: ", x)
fmt.Println("y after copy: ", y)
}
---------- 결과 ----------
x before copy: [0 0 0 0 0 0 0 0 0 0]
y before copy: [0 0 0]
x after copy: [1 2 3 4 5 0 0 0 0 0]
y after copy: [1 2 3]
'Data structure > Data type' 카테고리의 다른 글
[Python] 깊은복사(copy 와 deepcopy) (0) | 2023.02.27 |
---|---|
[Flutter] Collection , Generic (0) | 2022.04.14 |
Map/Dict - Python, Dart, Golang (0) | 2021.11.30 |