자료형에 대해 다시 톺아보기 위해 작성하는 오늘의 TIL
리스트의 선언
#1차원 리스트 >> 1_list = [item1, item2, ...] #2차원 리스트 >> 2_list = [item1[item1_1, item1_2], item2[item2_1], ...]
비어있는 리스트
a = list() or []
넣을 수 있는 자료형 : 모든 자료형
더하기
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
반복
>>> a = [1, 2, 3]
>>> a * 2
[1, 2, 3, 1, 2, 3]
len(list)
>>> a = [1, 2, 3]
>>> len(a)
3
수정
>>> a = [1, 2, 3]
>>> a[1] = 4
>>> print(a)
[1, 4, 3]
삭제
>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]
제거
가장 처음 요소가 삭제됨.
>>> a = ['a', 'b', 'c', 'b']
>>> a.remove(b)
>>> a
['a', 'c', 'b']
pop
맨 뒤의 요소만 삭제됨.
>>> a = ['a', 'b', 'c']
>>> a.pop()
>>> a
['a', 'b']
추가
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> a.append([5,6])
>>> a
[1, 2, 3, 4, [5, 6]]
삽입
>>> a = ['a', 'b', 'c']
>>> a.insert(0,'x') #0번째 위치에 x를 삽입
>>> a
['x', 'a', 'b', 'c']
정렬
>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]
뒤집기
주의점 : 역정렬이 아니라 그냥 그대로 반대로 뒤집는 것
>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']
카운팅
괄호 속의 요소가 몇개 있는지 카운팅하여 리턴
>>> a = [1, 2, 3, 4, 1]
>>> a.count(1)
2
확장
extend(x)의 x는 리스트만 가능. x리스트를 더하는 것이다.
a.extend([5,6]) / b+= [5,6] 이 둘은 같은 말이다.
>>> a = [1, 2, 3, 4]
>>> a.extend([5,6])
>>> a
[1, 2, 3, 4, 5, 6]
>>> b = [1, 2, 3, 4]
>>> b+= [5,6]
>>> b
[1, 2, 3, 4, 5, 6]
리스트 간 빼는건, 불가. a - b 가 불가하다는 말.
그럼 어떻게 써야할까?
a = [1,2,3]
b = [1,2]
[x for x in a if x not in b] # [3]
list(set(a) - set(b)) # [3]
list(set(a).difference(b)) # [3]
백준에서 사용하는 알고리즘에서 2차원 리스트를 입력을 받을 때 사용하는 형식
arr = []
for i in range(x):
arr[i] = list(map(int, input().split()))
리스트[행 idx][열 idx] = 리스트[세로인덱스][가로인덱스] = 값
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a[2][1] #2행 1열
60
>>> a[0][1] = 1000 # 0행, 1열인 요소에 값 할당
>>> a[0][1]
1000
>>> a
[[10, 1000], [30, 40], [50, 60]]
first_indices = [row[0] for row in info] # 각 리스트의 0번 인덱스 값만 가져옴
#조건 추가
filtered_values = [row[0] for row in info if row[0] == 1] # 0번 인덱스 값이 1인 것만
result = [row[1] for row in info if row[0] == 1]
for row in info:
if row[0] == 1: # 0번 인덱스가 1인지 확인
result.append(row[1]) # 1번 인덱스 값을 추가
번외
if, 첫번째 인덱스만 필요하다면?
result = next((row[1] for row in info if row[0] == 1), None)
print(result) # 출력: 1
#첫 번째로 조건을 만족하는 1번 인덱스 값
task
2차원 리스트의 모든 요소를 순회하며 num이 있는지 확인.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
# 10이 배열 내에 존재하는지 check
num = 10
if num in (x_num for row in matrix for x_num in row):
print("10은 배열 내에 있습니다.")
else:
print("10은 배열 내에 없습니다.")
if num in -> 만약, num 이 있다면,
x_num -> 비교할 임의의 변수에 계속 할당되는 숫자
for row in matrix -> 2차원 리스트인 matrix의 안의 리스트가 순차적으로 row에 할당.
for x_num in row -> 3에서의 할당된 row 리스트에서 요소를 하나씩 꺼내 x_num에 할당. 해당 x_num으로 num과 비교하며 찾음.
any(iter) : iter의 요소 중 하나라도 True일 경우, True를 반환.
단 하나의 참만 있어도 즉시 종료
any는 조건이 참인 경우, 한번 True를 만족하면 순회 끝.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
num = 10
found = any(num == x_num for row in matrix for x_num in row)
if found:
print("10은 배열 내에 있습니다.")
else:
print("10은 배열 내에 없습니다.")
for row in matrix
matrix의 각 행(즉, 리스트의 리스트)을 하나씩 가져옴.
첫 번째 row: [1, 2, 3]
두 번째 row: [4, 5, 6]
세 번째 row: [7, 8, 9, 10]
for x_num in row
현재 row에 포함된 요소를 하나씩 가져옴.
첫 번째 row) x_num = 1, 2, 3
두 번째 row) x_num = 4, 5, 6
세 번째 row) x_num = 7, 8, 9, 10
num == x_num
가져온 x_num 값과 num(10)을 비교.
첫 번째 row ) 1 == 10, 2 == 10, 3 == 10 모두 거짓.
세 번째 row에서 10 == 10이 참.
any()
위의 조건이 참(True)인 순간, any()가 즉시 True를 반환.
num == x_num이 단 한 번이라도 참이라면, 더 이상 순회하지 않고 결과 반환.
변수 found
found : any()의 반환값 저장.
무슨 검증 방법을 쓸까?
1)
2)
found = any(x % 2 == 0 for row in matrix for x in row)