일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바의정석
- MVC
- python
- Algorithm
- cloud computing
- JPA
- DB
- Java
- BFS
- 생성자
- 코딩테스트
- jsp
- 크루스칼
- spring
- sql
- 가상컴퓨팅
- 공개키 암호화
- dbms
- data structure
- 암호학
- JDBC
- 자료구조
- dfs
- 알고리즘
- 코테
- Stack
- javascript
- generic class
- Queue
- 클라우드 컴퓨팅
- Today
- Total
PLOD
[python] 리스트(List) 본문
1. 배열 (Array) : 선형으로 자료를 관리, 정해진 크기의 메모리를 먼저 할당 박아 사용하고, 자료의 물리적 위치와 논리적 위치가 같음
2차원 배열에서 2행의 배열을 입력받고 싶을 때는 다음과 같이 입력 받는다.
# 여기서 range 안의 2는 행의 갯수를 나타낸다
arr_2d = [list(map(int,input().split())) for _ in range(2)]
list comprehension을 이용하면 처음에 n * n 크기의, 전부 0으로 채워져 있는 2차원 배열을 다음과 같이 선언할 수 있다.
n, m = 4, 5
arr_2d = [
[0 for _ in range(m)]
for _ in range(n)
]
print(arr_2d)
>> 출력 결과
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
* python 리스트의 함수
1. pop()
pop 함수는 리스트의 특정 인덱스 값을 삭제 및 반환하는 기능을 가지고 있다.
s = 'baknana'
arr = list(s)
arr.pop(2)
s = ''.join(arr)
print(s)
>> banana
- arr.pop(삭제 할 인덱스)
2. remove()
remove 함수는 pop 함수와는 다르게 인덱스 값을 지정하여 해당 위치에 있는 값을 삭제하는 것이
아니고 삭제할 값을 명시한다는 점이 다르다.
- arr.remove(삭제할 값)
3. append()
append 함수는 새로운 값을 기존 리스트의 끝에 추가할 때 사용한다.
-arr.append(추가할 값)
4. extend()
extend 함수는 기존 리스트에 새로운 리스트이 내용 전부를 추가할 때 사용한다..
-arr.extend(추가할 배열)
5. insert()
insert 함수는 리스트의 특정 인덱스 값에 원하는 자료형에 데이터를 입력하는 기능을
가진다.
-arr.insert(삽입할 인덱스, 삽입할 값)
6. count()
count 함수는 리스트에 저장된 값들 중 특정 데이터의 개수를 반환하는 함수이다.
-arr.count(셀 값)
7. clear()
clear 함수는 리스트에 저장된 값들을 전부 삭제하는 기능을 가지고 있다.
-arr.clear()
8.reverse()
reverse 함수는 리스트에 할당 된 값들의 순서를 거꾸로 뒤집는 함수이다.
-arr.reverse()
9.sort()
sort 함수는 리스트에 할당된 값들의 순서를 오름차순으로 정렬하는 함수이다.
-arr.sort()
10.enumerate()
enumerate 함수는 리스트에서 탐색을 할 때 특정 원소의 인덱스를 찾아야 할때 사용한다.enumerate로 list를 감싸면, 원소로 (index, 원소)를 동시에 받으며 진행할 수 있다.
word = ['A', 'P', 'P', 'L', 'E']
# 해당 문자를 찾지 못했다면 -1
idx = -1
# 문자 탐색
for i, char in enumerate(word):
if char == 'L':
idx = i
# 문자가 존재하지 않는 경우
if idx == -1:
print("not exist")
else:
print(idx)
=============================================
>> 3
11. max()
python의 경우 max() 함수를 사용하여 바로 리스트의 최대값을 구할 수 있다.
arr = [-1, -5, -2, -5, -3, -9]
print(max(arr))
>> -1
12.min()
python의 경우 min() 함수를 사용하여 바로 리스트의 최솟값을 구할 수 있다.
arr = [11, 15, 12, 15, 13, 19]
print(min(arr))
>> 11
2차원 배열 만들기
2차원 배열은 DP, DFS,BFS 문제에서 꼭 나오는 구현이기 때문에 만드는 방법을 숙지 해야 한다.
n,m = map(int,input().split())
arr = [[0 for _ in range(m)] for _ in range(n)]
num = 1
for i in range(n) :
for j in range(m) :
arr[i][j] = num
num +=1
for i in range(n) :
for j in range(m) :
print(arr[i][j], end=" ")
print()
===================================================
>>
1 2 3
4 5 6
7 8 9
특정 문자열 확인
문자열 s 에 특정 문자열 'ab' 가 포함되어 있는 지 여부를 확인하는 방법은, 논리적으로 접근한다면
각각의 위치에 대해 조사하며 그 중 정확히 'ab'와 일치하는 위치가 있었는지 확인.
이때 for loop를 [0:length-2] 에서만 돌아야 한다.
s = 'appleabanana'
length = len(s)
exists = False
for i in range(length - 1):
if s[i] == 'a' and s[i + 1] == 'b':
exists = True
print(exists)
===================================================================
s = 'appleabanana'
length = len(s)
exists = False
for i in range(length - 1):
if s[i:i + 2] == 'ab':
exists = True
print(exists)
만약 판단하고자 하는 부분문자열이 'ab'와 같이 2자리가 아닌 input으로 주어진다 했을 때는
in 키워드를 사용하지 않고도 구현이 가능하다. 문자열 t의 길이를 len_t라 했을 때,
결국 s[i]와 t[0], s[i + 1]과 t[1] ...그리고 s[i + len_t - 1]과 t[len_t - 1]이 전부 일치하기를 바라는 것이기
때문에 이 역시도 boolean 값을 만들어 전부 일치하는지에 대한 여부를 판단하면 된다.
# i 01234567891011
s = 'appleabanana'
t = 'abbaba'
n = len(s)
exists = False
len_t = len(t)
for i in range(n - len_t + 1):
all_same = True
for j in range(len_t):
if s[i + j] != t[j]:
all_same = False
#if s[i] == t[0] and s[i + 1] == t[1] and ....
# s[i + len_t - 1] == t[len_t - 1]:
if all_same == True:
exists = True
print(exists)
python 리스트 함수
join()
리스트의 원소들을 concat하여 문자열로 합쳐 출력할 때 사용한다.
arr = ["apple","banana","candy"]
total_str = "".join(arr)
print(total_str)
======================================
>> applebananacandy
다음은 문자열을 알파벳 순서로 정렬하여 출력하는 코드이다.
string = "banana"
arr = list(string)
arr.sort()
print(arr) # ['a', 'a', 'a', 'b', 'n', 'n']
sorted_str = ''.join(arr)
print(sorted_str) # aaabnn
in ,not in
전체 리스트에서 특정 원소를 찾고 싶을 때 사용한다. 특정 원소가 존재한다 True를 반환한다. not in은 반대로 존재하지 않는다면 True를 반환한다.
word_find,n = input().split()
if n in word_find :
print(word_find.index(n))
else :
print("No")
=======================================
테스트 케이스 : LeeBrosCode o
>> 5
ex) 백준 1436번 . 영화 감독 숌
n = int(input())
charactor = 666
cnt = 0
while True :
if '666' in str(charactor) :
cnt += 1
if cnt == n :
print(charactor)
break
charactor += 1
index()
전체 리스트에서 특정 원소값의 위치(인덱스)를 찾고자 할 때 사용한다. 리스트.index(찾을값)
다음의 코드는 백준 2562문제로 최대값과 순서를 찾는 문제이다. 만약 리스트에 값이 없다면 -1을 출력한다.
arr = []
for i in range(9) :
n = int(input())
arr.append(n)
max = arr[0]
for i in arr :
if i > max :
max = i
print(max)
print(arr.index(max)+1)
set()
전체 리스트에서 중복된 데이터를 제거해준다. set(리스트) 방식으로 사용된다.
arr = []
for i in range(10):
n = int(input())
arr.append(n % 42)
arr = set(arr)
print(len(arr))
sorted()
리스트 뿐만 아니라 문자열을 정렬할 때 사용하는 함수이다.
string = "banana"
sorted_arr = sorted(string)
print(sorted_arr) # ['a', 'a', 'a', 'b', 'n', 'n']
sorted_str = ''.join(sorted_arr)
print(sorted_str) # aaabnn
find()
리스트나 문자열에서 특정 원소의 인덱스를 찾을 때 사용한다. 특정 원소를 찾으면 시작하는 문자열 인덱스를 반환하고, 없다면 -1을 반환한다. 예시로 단어가 n개 주어졌을 때, 문자열 T로 시작하는 단어들 중 사전순으로 정렬했을 때의 k번째 문자열을 출력하는 프로그램을 작성해보았다.
n,k,T = input().split()
arr = []
for _ in range(int(n)) :
word = input()
if word.find(T) == 0 :
arr.append(word)
arr.sort()
print(arr[int(k)-1])
※ 2차원 배열 생성시 유의 팁
다음은 같을까? 정답은 틀리다 다음의; 출력결과를 보면 다음과 같이 출력 되는 것을 볼 수 있다.
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
'개발 공부 > Python' 카테고리의 다른 글
[python] ASCII CODE (0) | 2023.05.29 |
---|---|
[python] python 기본 문법 (0) | 2023.03.15 |
[python] stack and queue 사용법 (0) | 2022.11.18 |
[python] 배열의 원소들을 깔끔하게 출력하는 방법 (0) | 2022.11.18 |
[python] slicing(슬라이싱) 기본 (0) | 2022.11.01 |