[3주차3일차] Chapter 04_자료구조/알고리즘 자료구조4

HA_·2023년 10월 23일
0

리스트 연결

리스트 연결(확장)

extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.

group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
print('group1: {}' .format(group1))
print('group2: {}' .format(group2))

group1.extend(group2)
print('group1: {}' .format(group1))
print('group2: {}' .format(group2))
#결괏값:
group1: ['홍길동', '박찬호', '이용규']
group2: ['강호동', '박승철', '김지은']
group1: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
group2: ['강호동', '박승철', '김지은']

리스트 연결(확장)

덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.

group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
print('group1: {}' .format(group1))
print('group2: {}' .format(group2))

result = group1 + group2
print('result: {}' .format(result))
print('group1: {}' .format(group1))
print('group2: {}' .format(group2))
#결괏값:
group1: ['홍길동', '박찬호', '이용규']
group2: ['강호동', '박승철', '김지은']
result: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
group1: ['홍길동', '박찬호', '이용규']
group2: ['강호동', '박승철', '김지은']

cf) extend
: 1번 리스트에 2번 리스트를 extend하면 1번 리스트가 확장되는 개념 즉, extend는 1번에 2번이 더해지는 개념
덧셈 연산자
: A라는 리스트와 B라는 리스트가 있으면 결과는 C라는 리스트가 됨. 즉, A, B가 그대로 있는 상태에서 새로운 리스트인 C가 만들어진다고 보면 됨.

실습

나와 친구가 좋아하는 번호를 합치되 번호가 중복되지 않게 하는 프로그램을 만들자.
나: 1, 3, 5, 6, 7
친구: 2, 3, 5, 8, 10

myFavoriteNumber = [1, 3, 5, 6, 7]
friendFavoriteNumber = [2, 3, 5, 8, 10]
print('myFavoriteNumber: {}' .format(myFavoriteNumber))
print('friendFavoriteNumber: {}' .format(friendFavoriteNumber))

addList = myFavoriteNumber + friendFavoriteNumber
print('addList: {}' .format(addList))

result = []
for number in addList:
    if number not in result:
        result.append(number)

print('result: {}' .format(result))
#결괏값:
myFavoriteNumber: [1, 3, 5, 6, 7]
friendFavoriteNumber: [2, 3, 5, 8, 10]
addList: [1, 3, 5, 6, 7, 2, 3, 5, 8, 10]
result: [1, 3, 5, 6, 7, 2, 8, 10]

리스트 아이템 정렬

리스트 연결(확장)

sort() 함수를 이용하면 아이템을 정렬할 수 있다.
오름차순 정렬일 때 => sort()
내림차순 정렬일 때 => sort(reverse=True)

# 문자일 때
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}' .format(students))

#오름차순(가,나,다 순)으로 정렬
students.sort(reverse=False)
print('students: {}' .format(students))

#내림차순(다,나,가 순)으로 정렬
students.sort(reverse=True)
print('students: {}' .format(students))


# 숫자일 때
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}' .format(numbers))

numbers.sort()
print('numbers: {}' .format(numbers))
#결괏값:
students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students: ['강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동']
students: ['홍길동', '이용규', '박찬호', '박승철', '김지은', '강호동']
numbers: [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers: [0.12, 1, 2, 3.14, 7, 9, 17, 35, 50, 100]

실습

아래 점수에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해보자.

from builtins import len

playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore: {}' .format(playerScore))

playerScore.sort()
print('playerScore: {}' .format(playerScore))

playerScore.pop(0)
playerScore.pop(len(playerScore) - 1)
print('playerScore: {}' .format(playerScore))

sum = 0
avg = 0
for score in playerScore:
    sum += score

avg = sum / len(playerScore)

print('sum: %.2f' % sum)
print('avg:  %.2f' % avg)
#결괏값:
playerScore: [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
playerScore: [8.8, 8.9, 9.0, 9.2, 9.5, 9.8]
playerScore: [8.9, 9.0, 9.2, 9.5]
sum: 36.60
avg:  9.15

리스트 아이템 순서 뒤집기

리스트 순서 뒤집기

reverse() 함수를 이용하면 아이템을 순서를 뒤집을 수 있다.

#문자일 때
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}' .format(students))

students.reverse()
print('students: {}' .format(students))


#숫자일 때
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}' .format(numbers))

numbers.reverse()
print('numbers: {}' .format(numbers))

실습

다음은 전쟁에서 사용되는 암호이다. 암호를 해독하는 프로그램을 만들어보자.

secret = '27156231'
secretList = []
solvedList = ''

# 문자를 숫자로 바꿈
for cha in secret:
    secretList.append(int(cha))

print('secretList: {}' .format(secretList))

# 뒤집어 엎음
secretList.reverse()
print('secretList: {}' .format(secretList))

val = secretList[0] * secretList[1]
secretList.insert(2, val)

val = secretList[3] * secretList[4]
secretList.insert(5, val)

val = secretList[6] * secretList[7]
secretList.insert(8, val)

val = secretList[9] * secretList[10]
secretList.insert(11, val)

print('secretList: {}' .format(secretList))
#결괏값:
secretList: [2, 7, 1, 5, 6, 2, 3, 1]
secretList: [1, 3, 2, 6, 5, 1, 7, 2]
secretList: [1, 3, 3, 2, 6, 12, 5, 1, 5, 7, 2, 14]

리스트 아이템 순서 뒤집기

리스트 슬라이싱

[n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
cf) 음수를 사용하면 뒤쪽에서부터 계산을 한다.

#문자일 때
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}' .format(students))
print('students: {}' .format(students[2:4]))
print('students: {}' .format(students[:4]))
print('students: {}' .format(students[2:]))
print('students: {}' .format(students[2:-2]))
print('students: {}' .format(students[-5:-2]))

#숫자일 때
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}' .format(numbers))
print('numbers: {}' .format(numbers[2:4]))
print('numbers: {}' .format(numbers[:4]))
print('numbers: {}' .format(numbers[2:]))
print('numbers: {}' .format(numbers[2:-2]))
print('numbers: {}' .format(numbers[-5:-2]))
#결괏값:
students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']
numbers: [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers: [0.12, 1]
numbers: [2, 50, 0.12, 1]
numbers: [0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers: [0.12, 1, 9, 7, 17, 35]
numbers: [7, 17, 35]

문자열 슬라이싱

[n:m]을 이용하면 문자열도 슬라이싱이 가능하다.

str = 'abcdefghijklmnopqrstuvwxyz'
print('str: {}' .format(str))
print('str: {}' .format(str[2:4]))
print('str: {}' .format(str[:4]))
print('str: {}' .format(str[2:]))
print('str: {}' .format(str[2:-2]))
print('str: {}' .format(str[-5:-2]))
#결괏값:
str: abcdefghijklmnopqrstuvwxyz
str: cd
str: abcd
str: cdefghijklmnopqrstuvwxyz
str: cdefghijklmnopqrstuvwx
str: vwx

슬라이싱 단계 설정

슬라이싱할 때 단계를 설정할 수 있다.

numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}' .format(numbers))
print('numbers: {}' .format(numbers[2:-2]))
print('numbers: {}' .format(numbers[2:-2:2]))
print('numbers: {}' .format(numbers[:-2:2]))
print('numbers: {}' .format(numbers[::2]))
#결괏값:
numbers: [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers: [0.12, 1, 9, 7, 17, 35]
numbers: [0.12, 9, 17]
numbers: [2, 0.12, 9, 17]
numbers: [2, 0.12, 9, 17, 100]

슬라이싱을 이용한 아이템 변경

슬라이싱을 이옹해서 아이템을 변경할 수 있다.

students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}' .format(students))

students[1:4] = ['park chanho', 'lee younggyu', 'gang hodong']
print('students: {}' .format(students))
#결괏값:
students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students: ['홍길동', 'park chanho', 'lee younggyu', 'gang hodong', '박승철', '김지은']

slice() 함수

slice()함수를 이옹해서 아이템을 슬라이싱할 수 있다.

students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}' .format(students))

print('students: {}' .format(students[slice(2,4)]))
print('students: {}' .format(students[slice(4)]))
print('students: {}' .format(students[slice(2, len(students))])) # 길이를 이용해서 끝까지 출력할 수 있다.
print('students: {}' .format(students[slice(2, len(students)-2)]))
print('students: {}' .format(students[slice(len(students)-5, len(students)-2)]))
#결괏값:
students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']

0개의 댓글