Chap.9 리스트와 튜플[리스트 관리] - 삽입, 연결, 삭제, 검색, 정렬, 컴프리핸션
리스트 관리
삽입, 연결, 삭제, 검색, 정렬, 컴프리핸션
Python tutorial 검색을 활용하자.
삽입
- .append(값) ★★★
- 리스트의 끝에 값을 추가 - .insert(위치, 값)
- 지정한 위치에 값을 삽입
nums = [1, 2, 3, 4] # empty list -> nums=[]
nums.append(5)
print(nums)
nums.insert(2, 99)
print(nums)
결과
[1, 2, 3, 4, 5]
[1, 2, 99, 3, 4, 5]
nums = [1, 2, 3, 4]
nums[2:2] = [90, 91, 92] # 새로운 값들을 삽입
print(nums)
결과
[1, 2, 90, 91, 92, 3, 4]
nums = [1, 2, 3, 4]
nums[2] = [90, 91, 92] # 지정한 위치의 엘리먼트에 리스트 대체 ☆☆☆
print(nums)
결과
[1, 2, [90, 91, 92], 4]
예제
Random 숫자 100개 만들기
기존 함수 이용
nums=[]
for n in range(100):
r = rand(1, 100) # 예전에 만든 함수
nums.append(r)
다만, 숫자가 겹칠 수는 있다.
범용적인 함수로 만들기
def getRandomList(start, end, count):
nums=[]
for _ in range(count): # 변수 _ 를 이용해서 안쓰이는 변수 대신 사용한다.
r = rand(start, end)
nums.append(r)
return nums
연결
- 리스트1.extend(리스트2)
- 리스트1 = 리스트1 + 리스트2
list1 = [1, 2, 3, 4, 5]
list2 = [10, 11]
list3 = list1 + list2 # 새로운 리스트를 리턴
print(list3)
list1.extend(list2) # 기존 리스트를 확장
print(list1)
결과
[1, 2, 3, 4, 5, 10, 11]
[1, 2, 3, 4, 5, 10, 11]
삭제(1)
- .remove(값)
- 리스트에서 값을 찾아 첫번째 해당 요소를 제거 - del(리스트[인덱스])
- 지정한 인덱스의 요소를 제거 - [시작:끝] = []
- 정한 범위의 요소를 제거
score = [88, 95, 70, 100, 99, 88, 78, 50]
score.remove(100)
print(score)
del(score[2])
print(score)
score[1:4]=[]
print(score)
결과
[88, 95, 70, 99, 88, 78, 50]
[88, 95, 99, 88, 78, 50]
[88, 78, 50]
삭제(2)
- .pop()
- 리스트의 끝 요소를 삭제하고 삭제한 요소를 리턴 - .pop(인덱스)
- 지정한 인덱스의 요소를 삭제하고 삭제한 요소를 리턴
score = [88, 95, 70, 100, 99]
print(score.pop())
print(score)
print(score.pop())
print(score)
print(score.pop(1))
print(score)
결과
99
[88, 95, 70, 100]
100
[88, 95, 70]
95
[88, 70]
삭제(3)
- Queue -> First In First Out -> FIFO
- Stack -> Last In First Out -> LIFO
score = [88, 95, 70, 100, 99]
score.append(50)
print('Queue', score)
score.pop(0)
print('Queue', score)
score.pop(0)
print('Queue', score)
score.append(67)
print('Queue', score)
score.append(98)
print('Queue', score)
결과
Queue [88, 95, 70, 100, 99, 50]
Queue [95, 70, 100, 99, 50]
Queue [70, 100, 99, 50]
Queue [70, 100, 99, 50, 67]
Queue [70, 100, 99, 50, 67, 98]
score = [88, 95, 70, 100, 99]
score.append(50)
print('Stack', score)
score.pop()
print('Stack', score)
score.pop()
print('Stack', score)
score.append(67)
print('Stack', score)
score.append(98)
print('Stack', score)
결과
Stack [88, 95, 70, 100, 99, 50]
Stack [88, 95, 70, 100, 99]
Stack [88, 95, 70, 100]
Stack [88, 95, 70, 100, 67]
Stack [88, 95, 70, 100, 67, 98]
검색
- .index(값) ( ≒ .find(값) )
- 지정한 값을 찾아 해당 요소를 리턴 , 없으면 예외 발생 - .count(값)
- 지정한 값이 리스트에 몇 번 나오는지 계산하여 리턴 - len(시퀀스)
- 시퀀스의 길이(요소수) 리턴 - max(시퀀스)
- 시퀀스 요소중 최대값 리턴 - min(시퀀스)
- 시퀀스 요소중 최소값 리턴 - 값 in 시퀀스, 값 not in 시퀀스 (단순히 있냐 없냐)
- 값이 시퀀스에 포함되어 있는지 여부를 True/False로 리턴
ans = input("결제 하시겠습니까? ")
if ans in ['yes', 'y', 'ok', '예']: # or 연산을 대신 할 수 있다.
print("결제를 진행합니다.")
else:
print("결제를 취소합니다.")
결과
결제 하시겠습니까? ok
결제를 진행합니다.
정렬
- .sort([reverse=True][key=키에 적용할 함수 ])
리스트를 정렬(디폴트는 오름차순), reverse=True로 오름차순/내림차순 선택 # 숫자는 key를 이용할 필요없다. - .reverse()
리스트의 순서를 역으로 바꿈 - sorted(시퀀스)
지정한 시퀀스를 정렬하여 새로운 리스트로 리턴 # 일반함수(Method X)
score = [88, 95, 70, 100, 99]
score.sort()
print(score)
score.reverse()
print(score)
결과
[70, 88, 95, 99, 100]
[100, 99, 95, 88, 70]
score = [88, 95, 70, 100, 99]
score.sort(reverse=True)
print(score)
결과
[100, 99, 95, 88, 70]
country = ["Korea", "japan", "CHINA", "america"]
country.sort()
print(country)
country.sort(key = str.lower) # key 함수를 적용 (원본 변화X)
print(country)
결과
['CHINA', 'Korea', 'america', 'japan']
['america', 'CHINA', 'japan', 'Korea']
score = [88, 95, 70, 100, 99]
sorted_score = sorted(score)
print(score)
print(sorted_score)
결과
[88, 95, 70, 100, 99]
[70, 88, 95, 99, 100]
score = [88, 95, 70, 100, 99]
sorted_score = sorted(score, reverse=True)
print(score)
print(sorted_score)
결과
[88, 95, 70, 100, 99]
[100, 99, 95, 88, 70]
예제
소문자 순 정렬 및 소문자 순 출력
def main():
country = ["Korea", "japan", "CHINA", "america"]
for i in range(len(country)):
country[i] = country[i].lower()
country.sort()
print(country)
country = ["Korea", "japan", "CHINA", "america"]
country.sort(key=str.lower)
for c in country:
print(c.lower(), end=", ")
main()
결과
['america', 'china', 'japan', 'korea']
america, china, japan, korea,
컴프리헨션
- [수식 for 변수 in 리스트 if 조건]
내부의 리스트를 순회하며 각 요소에 대한 수식을 적용하여 최종 요소를 생성
if 조건을 추가하면 조건을 만족하는 요소만 추가
[ n for n in range (1, 11) ] (= list(range(1, 11)) )
nums = [ n*2 for n in range(1, 11)]
for i in nums:
print(i, end = ', ')
결과
2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
nums = []
for n in range(1, 11):
nums.append(n*2)
print(nums)
결과
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
print([n for n in range(1, 11) if n % 3 == 0]) # 만족하는 조건만 필터링
결과
[3, 6, 9]
컴프리핸션의 대상이 되는 패턴
nums = []
for v in 시퀀스:
...
value = ...
nums.append(value)
# 비어있는 리스트에 값을 추가하는데 루프를 돈다!!
예제
컴프리핸션의 대상이 되는 패턴
def getRandomList(start, end, count):
nums=[]
for _ in range(count):
r = rand(start, end)
nums.append(r)
return nums
def main():
# l = getRandomList(1, 100, 6)
l = [ rand(1,100) for _ in range(6)]
print(l)
main()
# 둘이 같다.
'인터페이스 개발 > Python' 카테고리의 다른 글
Python - 리스트와 튜플[튜플] - 불변 자료 집합, 튜플로 가능한 일 (0) | 2020.07.25 |
---|---|
Python - 리스트와 튜플[예제] - Number guessing game(추가) (0) | 2020.07.25 |
Python - 리스트와 튜플[리스트] - 자료의 집합, 리스트의 요소, 이중 리스트 (0) | 2020.07.25 |
Python - 문자열 관리[포맷팅] - 포맷팅, 선형 포맷팅, 자리 채움방식 (0) | 2020.07.25 |
Python - 문자열 관리[문자열 메서드] - 검색, 조사, 기타 메서드, 변경, 분할, 대체 (0) | 2020.07.25 |
댓글