Day32. 자료구조 (5)

Junghwan Park·2023년 5월 20일
0

스터디노트

목록 보기
33/54

리스트 나머지 기능들 (01)

  • 리스트의 나머지 기능들(1)

리스트를 곱셈 연산하면 아이템이 반복된다.


'홍길동' '박찬호' '이용규'

* 2 ( 곱셈 연산 )

'홍길동' '박찬호' '이용규' '홍길동' '박찬호' '이용규'

students = ['홍길동', '박찬호', '이용규']
print('students : {}'.format(students))

studentsMul = students * 3
print('studentsMul : {}'.format(studentsMul))   # 곱셈 연산만큼 늘어난다!

numbers = [2, 50, 0.12, 1, 9]
print('numbers : {}'.format(numbers))

numbersMul = numbers * 2
print('numbersMul : {}'.format(numbersMul))   # 곱셈 연산만큼 늘어난다!

index(item) 함수를 item의 인덱스를 알아낼 수 있다.


'홍길동', '박찬호', '이용규'

index('홍길동')

1

students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']    # '강호동'이 두개 있는데 index()를 사용하면?
print('students : {}'.format(students))

searchIdx = students.index('강호동')
print('searchIdx : {}'.format(searchIdx))   # 중복값이 있다면 가장 앞에 있는 인덱스만 뽑아준다!

searchIdx = students.index('강호동', 2, 6)   # 인덱스를 찾을 범위를 정해준다!   index 2~5중 '강호동'이 어디에 있느냐!
print('searchIdx : {}'.format(searchIdx))


numbers = [2, 50, 0.12, 1, 9]
searchIdx = numbers.index(0.12)
print('searchIdx : {}'.format(searchIdx))
  • 실습
    1부터 10까지의 정수가 중복되지 않고 섞여 있을 때 행운의 숫자 7의 위치를 찾자!
import random

sampleList = random.sample(range(1, 11), 10)    # 1에서 10까지 10개의 숫자 출력!

selectIdx = int(input('숫자 7의 위치 입력 : '))
searchIdx = sampleList.index(7) # 숫자 7이 있는 인덱스 값!

if searchIdx == selectIdx:
    print('빙고!!')
else:
    print('비비고!!')

print('sampleList : {}'.format(sampleList))
print('searchIdx : {}'.format(searchIdx))

리스트 나머지 기능들 (02)

  • 특정 아이템의 개수 알아내기

count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.


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

count('홍길동') 개수파악

1

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

searchCnt = students.count('홍길동')   # '홍길동' 아이템의 개수를 알고 싶다!
print('searchCnt : {}'.format(searchCnt))

searchCnt = students.count('강호동')   # '강호동' 아이템의 개수를 알고 싶다!
print('searchCnt : {}'.format(searchCnt))

searchCnt = students.count('김아무개')   # 없는 아이템은 0으로 출력!
print('searchCnt : {}'.format(searchCnt))

del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.


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

del students[1] # 1의 아이템을 삭제해라!

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

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

del students[1] # 인덱스 1의 아이템을 삭제해라!
print('students : {}'.format(students))

del students[1:4]   # 슬라이싱을 통해 범위를 지정해서 지울 수 있다!
print('students : {}'.format(students))

del students[2:]   # 2번째 부터 끝까지 모두 삭제!
print('students : {}'.format(students))
  • 실습
    하루 동안 헌혈을 진행한 후 혈액형 별 개수를 파악하는 프로그램을 만들어보자.
import random

types = ['A', 'B', 'AB', 'O']
todayData = []  # 하루 헌혈 수 카운트
typeCnt = []    # 혈액형 별 카운트

for i in range(100):    # 100개를 기준으로 한다!
    type = types[random.randrange(len(types))]  # len(types) = 0, 1, 2, 3
    todayData.append(type)

print('todayData : {}'.format(todayData))
print('todayData length : {}'.format(len(todayData)))

for type in types:
    print('{}형 : {}개'.format(type, todayData.count(type)))  # 이 부분 다시 이해해 보기

튜플(Tuple)

  • 튜플

리스트와 비슷하지만 아이템 변경 불가!


리스트 → ['강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
아이템 변경(수정, 삭제 등) 가능


튜플 → ('강호동', '박찬호', '이용규', '박승철', '강호동', '김지은')
아이템 변경(수정, 삭제 등 ) ★불가능★

  • '()'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.
    students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
    numbers = (10, 20, 30, 40, 50, 60, 70)
    strs = (3.14, '십', 20, 'one', '3.141592')


    숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.


    datas = (10, 20, 30, (40, 50, 60))


    튜플에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
print('students : {}'.format(students))
print('students type : {}'.format(type(students)))

numbers = (10, 20, 30, 40, 50, 60, 70)
print('numbers : {}'.format(numbers))
print('numbers type : {}'.format(type(numbers)))

실습
가족 이름을 튜플에 저장하고 출력해보자.
myFamilyNames = ('홍아빠', '홍엄마', '홍길동', '홍동생')
print(myFamilyNames)


todaySchedule = ('10시-업무회의',
'12시-친구와점심약속',
'3시-자료정리',
'6시-운동',
'9시-TV시청')
print(todaySchedule)

myFamilyNames = ('홍아빠', '홍엄마', '홍길동', '홍동생')
print(myFamilyNames)
myFamilyNames[2] = '홍홍홍'    # 튜플은 수정할 수 없으므로 오류가 난다!

todaySchedule = ('10시-업무회의',
                 '12시-친구와점심약속',
                 '3시-자료정리',
                 '6시-운동',
                 '9시-TV시청')
print(todaySchedule)

튜플 아이템 조회

  • 튜플 아이템 조회

튜플의 아이템을 조회하자!


튜플도 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표가 있다.


('홍길동', '박찬호', '이용규', '박승철', '김지은')
0 1 2 3 4

튜플 아이템은 인덱스를 이용해서 조회 가능하다.

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

print('students[5] : {}'.format(students[5]))   # 존재하지 않는 인덱스를 조회하면 에러가 발생한다!

numbers = (10, 20, 30, 40, 50)
print('numbers[0] : {}'.format(numbers[0]))
print('numbers[1] : {}'.format(numbers[1]))
print('numbers[2] : {}'.format(numbers[2]))
print('numbers[3] : {}'.format(numbers[3]))
print('numbers[4] : {}'.format(numbers[4]))
  • 실습
    5명의 학생 이름을 튜플에 저장하고 인덱스가 홀수인 학생과 짝수(0포함)인
    학생을 구분해서 인덱스와 학생 이름을 출력해보자.
students = ('김성예', '신경도', '박기준', '최승철', '황동석')
# print('--인덱스가 짝수인 학생--')
# print('students[0] : {}'.format(students[0]))
# print('students[2] : {}'.format(students[2]))
# print('students[4] : {}'.format(students[4]))
#
# print('--인덱스가 홀수인 학생--')
# print('students[1] : {}'.format(students[1]))
# print('students[3] : {}'.format(students[3]))

# for문으로 만들어 보기!
for i in range(len(students)):
    if i % 2 == 0:
        print('인덱스 짝수 : students[{}] : {}'.format(i, students[i]))
    else:
        print('인덱스 홀수 : students[{}] : {}'.format(i, students[i]))

in 과 not in 키워드

  • in과 not in 키워드
  • 아이템 존재 유/무 판단하기!


    in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다.


    studentsTuple = ('홍길동', '박찬호', '이용규', '박승철', '김지은')


    searchName = input('학생 이름 입력 : ')
    if searchName in studentsTuple:
    print('{} 학생은 우리반 학생입니다.'.format(searchName))
    else:
    print('{} 학생은 우리반 학생이 아닙니다.'.format(searchName))
studentsTuple = ('홍길동', '박찬호', '이용규', '박승철', '김지은')

searchName = input('학생 이름 입력 : ')
if searchName in studentsTuple:
    print('{} 학생은 우리반 학생 입니다.'.format(searchName))
else:
    print('{} 학생은 우리반 학생이 아닙니다.'.format(searchName))


not in 으로 한다면
if searchName not in studentsTuple:
    print('{} 학생은 우리반 학생이 아닙니다.'.format(searchName))
else:
    print('{} 학생은 우리반 학생 입니다.'.format(searchName))
  • in, not in 키워드는 문자열에서도 사용 가능하다.
pythonStr = '파이썬[3](영어: Python)은 1991년[4] 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로,' \
            ' 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.'

print('{} : {}'.format('Python', 'Python' in pythonStr))    # True
print('{} : {}'.format('Python', 'python' in pythonStr))    # False

print('{} : {}'.format('파이썬', '파이썬' in pythonStr))    # True
print('{} : {}'.format('파이선', '파이선' in pythonStr))    # False

print('{} : {}'.format('귀도', '귀도' in pythonStr))    # True
print('{} : {}'.format('객체지향적', '객체지향적' in pythonStr))    # True
  • 실습1
    컴퓨터가 1부터 10까지 5개의 난수를 생성한 후, 사용자가 입력한 숫자가 있는지 또는 없는지를 출력하는 프로그램을 만들어보자.
import random

randomNumbers = random.sample(range(1, 11), 5)  # sample로 하는 것 확인

userNumber = int(input('숫자 입력(확률 50%): '))
if userNumber in randomNumbers:
    print('빙고!!')
else:
    print('다시 도전!!')

print('randomNumbers : {}'.format(randomNumbers))
print('userNumber : {}'.format(userNumber))
  • 실습2
    문장에서 비속어가 있는지 알아내는 프로그램을 만들어보자.
wrongWord = ['쩔었다', '짭새', '꼽사리', '먹튀', '지린', '쪼개다', '뒷담 까다']
sentence = '짭새 등장에 강도들은 모두 쩔었다. 그리고 강도 들은 지린 듯 도망갔다.'

for word in wrongWord:  # 7번 반복!
    if word in sentence:
        print('비속어 : {}'.format(word))

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

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

0개의 댓글