Day31. 자료구조 (4)

Junghwan Park·2023년 5월 19일
0

스터디노트

목록 보기
32/54

리스트의 연결

  • 리스트 연결

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


'홍길동' '박찬호' '이용규' extend() '강호동' '박승철' '김지은'
List 1 ↓ List 2
리스트 연결
'홍길동' '박찬호' '이용규' '강호동' '박승철' '김지은'


'+ 기호로도 연결 가능!


'홍길동' '박찬호' '이용규' + '강호동' '박승철' '김지은'
a b


'+ 사용하는 경우 리스트 a,b를 합친 c가 만들어진다

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

group1.extend(group2)
print('group1 : {}'.format(group1)) # group1이 group2와 합쳐져 확장된다!
print('group2 : {}'.format(group2))

result = group1 + group2
print('result : {}'.format(result)) # group1과 2의 크기는 변하지 않는다!
print('group1 : {}'.format(group1))
print('group2 : {}'.format(group2))
  • 실습
    나와 친구가 좋아하는 번호를 합치되 번호가 중복되지 않게 하는 프로그램을 만들자.
    나 1 3 5 6 7
    친구 2 3 5 8 10
myFavoriteNumbers = [1, 3, 5, 6, 7]
friendFavoriteNumbers = [2, 3, 5, 8, 10]

print('myFavoriteNumbers : {}'.format(myFavoriteNumbers))
print('friendFavoriteNumbers : {}'.format(friendFavoriteNumbers))

addList = myFavoriteNumbers + friendFavoriteNumbers
print('addList : {}'.format(addList))

result = []
for number in addList:
    if number not in result:
        result.append(number)   # 중복이 없는 데이터만 새로운 리스트 result에 입력!

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

리스트 아이템 정렬

  • 리스트 연결(확장)

sort() 함수를 이용하면 아이템을 정렬할 수 있다.


'홍길동' '박찬호' '이용규' '강호동' '박승철' '김지은'

내림차순 정렬 ← sort(reverse = True)
오름차순 정렬 ← sort()

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

students.sort(reverse = True)
print('students : {}'.format(students))

students.sort(reverse = False)
print('students : {}'.format(students))
  • 숫자도 정렬이 가능하다
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers : {}'.format(numbers))

numbers.sort(reverse = True)
numbers.sort(reverse = False)
print('numbers : {}'.format(numbers))
  • 실습
    아래 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해 보자.


    점수1 점수2 점수3 점수4 점수5 점수6
    9.5 8.9 9.2 9.8 8.8 9.0
playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore : {}'.format(playerScore))

playerScore.sort()  # 정렬을 통해 최저, 최고 점수를 구할 수 있다!
print('playerScore : {}'.format(playerScore))

# 정렬을 했으니 pop로 최저, 최고 삭제!
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 : {}'.format(sum))
print('avg : {}'.format(avg))

리스트 아이템 순서 뒤집기

  • 리스트 아이템 순서 뒤집기

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


'홍길동' '박찬호' '이용규' '강호동' '박승철' '김지은'

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))
  • 실습
    다음은 전쟁에서 사용되는 암호이다. 암호를 해독하는 프로그램을 만들어보자.


    암호 '27156231'


    해독 '13326125157214'
secret = '27156231'
secretList = []
solvedList = ''

for cha in secret:
    secretList.append(int(cha)) # 암호를 일단 int형으로 변경!

secretList.reverse()
print(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))

리스트 슬라이싱

  • 리스트 슬라이싱

[n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.


'홍길동' '박찬호' '이용규' '강호동' '박승철' '김지은'

슬라이싱 ← [2:4]

2 <= n < 4

'이용규' '강호동'


앞의 숫자는 포함 뒤에 숫자는 그 앞까지!

  • 문자 슬라이싱 해보기!
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
print('students : {}'.format(students[2:4]))
print('students : {}'.format(students[:4]))    # 앞에 숫자를 생략하면 0부터
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]))    # 앞에 숫자를 생략하면 0부터
print('numbers : {}'.format(numbers[2:]))    # 뒤에 숫자를 생략하면 끝까지
print('numbers : {}'.format(numbers[2:-2]))    # -값을 넣으면 뒤쪽부터
print('numbers : {}'.format(numbers[-5:-2]))    # -값을 넣으면 뒤쪽부터
  • [n:m]을 이용하면 문자열도 슬라이싱이 가능하다.
str = 'abcdefghijklmonpqrstuvwxyz'
print('str length : {}'.format(len(str)))
  • 슬라이싱할 때 단계를 설정할 수 있다.
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers : {}'.format(numbers[2:-2]))
print('numbers : {}'.format(numbers[2:-2:2]))   # 콜론을 두개 사용하면 단계를 설정할 수 있다 이것의 경우 한칸을 건너뛰고 2씩!
print('numbers : {}'.format(numbers[:-2:2]))   # 시작을 생략 가능!
print('numbers : {}'.format(numbers[::2]))   # 시작과 끝을 모두 생략하면 전체 선택!
  • 슬라이싱을 이용해서 아이템을 변경할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))

students[1:4] = ['park chanho', 'lee younggyu', 'gang hodong']  # 슬라이싱해서 데이터를 바꾼다!
print('students : {}'.format(students))
  • 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)]))

이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
안녕하세요 반갑습니다^^

0개의 댓글