2022. 10. 22. 23:44ㆍ파이썬(Python)
1. 리스트에 있는 원소의 인덱스 구하기
1-1. for loop
- 몇 번째 index에 있는지 저장해 줄 idx 변수를 사용.
word=['a','b','c','d','e']
val=input()
idx=-1
for i in range(len(word)):
if word[i]==val:
idx=i
if idx==-1:
print('not exist')
else:
print('exist')
print(f'{val}의 index는 {idx}')
결과
>> b
b의 index는 1
exist
>> f
not exist
1-2 enumerate()
- 리스트를 enumerate로 감싸 for loop를 사용하면 (index, 원소)와 같이 튜플로 반환
word=['a','b','c','d','e']
idx=-1
for i in enumerate(word):
print(i)
결과
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
- enumerate를 사용해서 원하는 원소의 index를 구할 수 있음
word=['a','b','c','d','e']
val=input()
idx=-1
for i,j in enumerate(word):
if j==val:
idx=i
if idx==-1:
print('not exist')
else:
print('exist')
print(f'{val}의 index는 {idx}')
1-3. index()
- 리스트에 존재하는 원소의 index를 찾기 위해 사용
- 리스트에 존재하지 않는 원소에 사용하면 Value error 발생
- 해당 원소가 리스트에 포함되는지 확인 후 사용.
word=['a','b','c','d','e']
val=input()
idx=-1
if val in word:
print(word.index(val))
else:
print('not exist')
2. 특정 값의 개수 구하기
2-1. for loop
- cnt 변수를 활용해 for loop 사용
word=['a','b','a','b','b']
val=input()
cnt=0
for i in word:
if i==val:
cnt+=1
print(f'{val}의 개수는 {cnt}')
결과
>> b
b의 개수는 3
2-2. count()
- 리스트에 내장 함수인 count를 사용해 특정 원소의 개수를 구할 수 있음.
word=['a','b','a','b','b']
val=input()
print(word.count(val))
결과
>> a
2
Q) 탐색 프로그램
- n, q 입력 (n : 원소 개수, q : 질의 개수)
- n개의 원소 입력
- q개의 질의 입력
▷ 질의
- print a => a번째 원소 출력
- exist a => a가 있는지 판단.
- 있으면 몇 번째 원소인지 출력.
- 2개 이상 있으면 더 작은 index를 출력
- 없으면 0 출력
- print a b => a번째부터 b번째까지 순서대로 출력
- 순서는 1번째부터 n번째까지
n,q=map(int,input().split())
arr=list(map(int,input().split()))
for i in range(q):
query=input().split()
if query[0]=='print':
if len(query)==2:
idx=int(query[1])
print(f'>> {arr[idx-1]}')
else:
a,b=int(query[1]),int(query[2])
print('>>',end=' ')
for j in range(a,b+1):
print(arr[j-1],end=' ')
print()
else:
a=int(query[1])
if a in arr:
print('>>',arr.index(a)+1)
else:
print('>>', 0)
- 질의를 입력받고 split을 사용해 리스트로 변환
- print는 숫자를 1개 받을 때, 2개 받을 때로 나눠서 적용
- 문제에서 1번째부터 시작함. 따라서 리스트는 0번째로 시작하므로 주의
- exist는 index를 사용해 index 반환.
결과
5 5
3 2 4 5 4
print 4
>> 5
exist 4
>> 3
exist 5
>> 4
print 1 5
>> 3 2 4 5 4
print 2 5
>> 2 4 5 4
Q) 연속 부분 수열
- n개의 원소로 이루어진 수열 A 입력
- m개의 원소로 이루어진 수열 B 입력
- 수열 B가 수열 A의 원소들을 연속하게 뽑으면 연속 부분 수열
- A : [1, 2, 3, 4]
- B1 : [1, 2]
- B2 : [2, 4]
- B1은 A의 연속 부분 수열
- B2는 A의 연속 부분 수열 X
a=list(map(int,input().split()))
b=list(map(int,input().split()))
ans=False
for i in range(len(b)):
for j in range(len(a)):
if b[i]==a[j]:
if a[j:j+len(b)]==b:
ans=True
break
if ans==True:
print('Yes')
else:
print('No')
- ans는 bool type의 변수. True이면 연속 부분 수열. False이면 연속 부분 수열 아님
- b의 연속 부분 수열의 시작 원소가 a에 있으면
- 원소의 index를 j라 하고, a에서 j부터 len(b)+j까지 slicing
- slicing 한 리스트와 b가 같으면 ans는 True
결과
>> 1 2 3 4 5
>> 2 3 4
Yes
>> 1 2 3 4 5
>> 2 3 5
No
Q) 숫자가 등장하는 위치
- 자연수 a, b를 입력
- 여러 개의 숫자를 입력
- a가 b번째로 등장할 때 몇 번째 위치의 글자인지 출력
a,b=map(int,input().split())
arr=list(map(int,input().split()))
cnt=0
for i in range(len(arr)):
if arr[i]==a:
cnt+=1
if cnt==b:
print(f'{a}의 {b}번째 등장하는 위치는 {i+1}이다.')
break
if cnt!=b:
print(f'{a}가 {b}번 등장하지 않음')
- for loop를 사용해서 arr [i]가 a와 같으면 cnt(개수)를 1 증가한다.
- cnt가 b와 같으면 index를 나타내는 i에 1을 더해 위치를 출력하고 break를 통해 탈출한다.
- cnt가 b와 같지 않다면 a가 b번 등장하지 않는다고 출력한다.
'파이썬(Python)' 카테고리의 다른 글
리스트 최대 최소 2 (0) | 2022.10.25 |
---|---|
리스트 최대, 최소 (0) | 2022.10.23 |
Count 리스트 (0) | 2022.10.15 |
리스트 만들기 (0) | 2022.10.14 |
리스트와 인덱스 (0) | 2022.10.10 |