본문 바로가기
study/Python

[Python] 31. 문자열 함수, Collection(list, tuple, dictionary, set), comprehension

by 금이패런츠 2022. 6. 14.
728x90
반응형

Collection : 여러개의 데이터를 저장할 수 있는 객체
        list(리스트) : 배열의 형태. 인덱스 사용가능, []
        tuple(튜플)  : 상수화된 리스트. 변경불가 리스트, ()
        dictionary(덱셔너리) : 자바의 Map. 
                    (key, value) 쌍인 객체들. {}
        set(셋) : 집합. 중복불가 {}

 

comprehension 방식으로 Collection 객체 생성

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 14 09:31:19 2022

@author: p011v
"""

'''
    print(값) : 화면에 출력하기
    print(값1, 값2 ...) : 값을 여러개 화면에 출력하기
    print("{0:d}{1:2d}...".format(값1, 값2, ...)) : 형식문자 이용하여 출력
    print("%2d, %3d" %(값1, 값2)) : 형식문자 이용하여 값을 여러개 출력
    
    문자열 : 문자들의 모임. 인덱스(첨자)를 사용가능
    "문자열"[시작인덱스:종료인덱스:증감값]
        시작인덱스 생략시 : 0번부터 시작
        종료인덱스 생략시 : 마지막 문자까지
        증감값 생략시 : 1씩 증가
        
    조건문 : if else, if elif else, True if 조건식 else False
    반복문 : for 변수 in 범위, while 조건식
        범위 : range(초기값, 종료값+1, 증감식)
        break, continue
    조건문, 반복문 : 들여쓰기 주의.
'''

########## 0. 문자열 함수
'''
    len(문자열) : 문자열의 길이
    문자열.count(문자) : 문자열에서 문자의 갯수 리턴
    문자열.find(문자) : 문자열에서 문자의 위치 리턴. 문자가 없는 경우 -1 리턴
    문자열.index(문자) : 문자열에서 문자의 위치 리턴. 문자가 없는 경우 오류 발생
'''
a = "hello"
# a문자열에서 l자의 갯수 출력하기
cnt = 0
# len(a) : a문자열의 길이
for i in range(0, len(a)) :
    if a[i] == 'l' :
        cnt += 1
print(a, '에서 l문자의 갯수:', cnt)

print(a, '에서 l문자의 갯수:', a.count('l')) #2
print(a, '에서 l문자의 갯수:', a.count('a')) #0

# a문자열에서 l자의 위치 출력하기
print(a, '에서 l문자의 위치:', a.find('l')) #2
print(a, '에서 l문자의 위치:', a.index('l')) #2
print(a, '에서 l문자의 위치:', a.find('l',3)) #3 : 3번 인덱스부터 몇번째에 있는지
print(a, '에서 l문자의 위치:', a.index('l',3)) #3 : 3번 인덱스부터 몇번째에 있는지
# a문자열에서 a자의 위치 출력하기
print(a, '에서 l문자의 위치:', a.find('a')) #-1 : 없음
print(a, '에서 l문자의 위치:', a.index('a')) #오류발생

# 문자열의 종류 알려주는 함수
str = "123"
str = "Aa123"
str = "Aa"
str = "AA"
str = "aa"
str = "  "
if str.isdigit() :
    print(str,": 숫자")
if str.isalpha() :
    print(str,": 문자")
if str.isalnum() :
    print(str,": 문자+숫자")
if str.isupper() :
    print(str,": 대문자")
if str.islower() :
    print(str,": 소문자")
if str.isspace() :
    print(str,": 공백")
    
###########################################################
#   Collection : 여러개의 데이터를 저장할 수 있는 객체
#        list(리스트) : 배열의 형태. 인덱스 사용가능, []
#        tuple(튜플)  : 상수화된 리스트. 변경불가 리스트, ()
#        dictionary(덱셔너리) : 자바의 Map. 
#                    (key, value) 쌍인 객체들. {}
#        set(셋) : 집합. 중복불가 {}
###########################################################

########## 1.list(리스트)
a = [0,0,0,0]
b = []
print(a, len(a)) #len(a) : a 리스트의 요소의 갯수
print(b, len(b))

# a 길이만큼 숫자를 입력받아, a에 저장하고, 입력받은 숫자의 전체 합게 출력하기
# a 길이만큼 숫자를 입력받아, b에 저장하고, 입력받은 숫자의 전체 합게 출력하기
hap1 = 0
for i in range(0, len(a)) : # : 0 ~ len(a) -1까지의 숫자
    a[i] = int(input(str(i+1)+"번째 숫자 입력 : "))
  # b[i] = a[i] : 오류발생
    b.append(a[i]) #b 리스트에 요소를 추가
    hap1 +=  a[i]
print(a, "요소의 합 : ", hap1)
# sum(리스트) : 숫자형 요소의 합 리턴
print(a, "요소의 합 : ", sum(a))
print(b, "요소의 합 : ", sum(b))

print("a=%s" % (a)) # 형식문자를 이용한 출력
a.append(1)
print(a)

# a list 정렬하기
a.sort(a)

print(a)
print(a[4]) #마지막 요소 출력하기
print(a[len(a)-1]) #마지막 요소 출력하기
print(a[-1]) #마지막 요소 출력하기
print(a[-2]) #마지막에서 2번째 요소 출력하기

#pop() : 마지막요소를 제거하고 리턴
print("pop() 결과: ", a.pop())
print(a) #마지막 요소가 제거됨

#reverse() : 요소들의 위치를 역순으로 리턴
a.reverse()
print(a)

#index(값) : 리스트에서 값의 위치 리턴
print(a, "리스트에서 20의 위치: ", a.index(20))
print(a, "리스트에서 50의 위치: ", a.index(50)) #요소가 없는 경우 오류 발생
#print(a, "리스트에서 20의 위치: ", a.find(20)) #리스트는 find함수가 없음. 사용불가.

#insert(인덱스, 값) : 리스트에 중간에 요소 추가
a.insert(2, 222)
print(a)

#remove(값) : 리스트에 해당 요소를 삭제
a.remove(222)
print(a)

#extend() : 다른 리스트 추가하기
a.extend(b) #a리스트에 b리스트 추가하기
print(a)

#a 리스트에 30값의 갯수 출력하기
print(a, "30의 갯수: ", a.count(30)) #2
print(a, "300의 갯수: ", a.count(300)) #0

# 문자열을 분리하여 리스트로 저장하기
day = "2022/06/14"
c = day.split("/") #문자열을 특정문자("/")로 분리하여 리스트로 리턴
print(c)



# 문제 : ss 문자열의 모든 숫자들의 합을 출력하기
ss = "10,20,50,60,30,40,50,60,30"
# slist : 리스트의 요소의 자료형은 문자열임
slist = ss.split(",")
#print(sum(slist)) #요소의 자료형이 문자열인 경우 사용불가
hap = 0
for n in slist :    #n : slist의 각각의 요소의 값
    hap += int(n)   #    int('10') = 10 : 문자열을 숫자로 변환 for구문으로 반복
print(slist, "의 요소의 합: ", hap)

#map 함수 : 리스트(slist)의 요소에 적용되는 함수(int) 설정하는 함수
mlist = list(map(int, slist))
print(mlist)
print(sum(mlist))

print(slist, "의 요소의 합: ", sum(list(map(int, slist))))


########## 2. dictionary(덱셔너리) : {(키1:값1),(키2:값2)}
score_dic = {'lee':100,'hong':70,'kim':90}
print(score_dic)
print(type(score_dic)) # <class 'dict'>
#'hong'의 점수 출력하기
# dictionary['key'] : value값 리턴.
print(score_dic['hong'])
#'hong'의 점수 수정하기
score_dic['hong'] = 75
print(score_dic)
#'park'의 점수 추가하기
score_dic['park'] = 80
print(score_dic)
#'park' 정보 제거하기
del score_dic['park']
print(score_dic)

#키들만 조회하기
print(score_dic.keys())     #dict_keys(['lee', 'hong', 'kim'])
print(list(score_dic.keys()))     #['lee', 'hong', 'kim']
#값들만 조회하기
print(score_dic.values())   #dict_values([100, 75, 90])
print(list(score_dic.values()))   #[100, 75, 90]
#(키,값)들 조회하기
print(score_dic.items())    #dict_items([('lee', 100), ('hong', 75), ('kim', 90)])
print(list(score_dic.items())) # [('lee', 100), ('hong', 75), ('kim', 90)]

'''
    문제 : 1. 궁합음식의 키를 입력받아 해당되는 음식을 출력하기
              등록안된 경우 오류 발생 => 등록여부 판단 필요
           2. 종료 입력시 등록된 내용 출력하기
               등록된 음식 :
                       떡볶이 : 오뎅
                       짜장면 : 단무지
           3. 등록이 안된 경우
               등록여부를 입력받아, 등록하는 경우 궁합음식을 입력받기
               등록하시겠습니까(y)?
                   y 입력 : foods 객체에 추가
                           궁합음식 입력받아서 foods에 추가함
                  y가 아닌 경우 : 
                          음식을 다시 입력하기
'''
foods = {"떡볶이":"어묵","짜장면":"단무지","라면":"김치","맥주":"치킨"}
while True :
    myf = input(str(list(foods.keys())) + "중 입력 (종료): ")
    if myf == '종료' :
        break
    if myf in foods:    #foods데이터의 키값 중 myf가 존재?
        print("%s 의 궁합음식 : %s" % (myf, foods[myf]))
    else :
        print("%s은 등록된 음식이 아닙니다." % (myf))
        y = input("등록하시겠습니까(y)?")
        if y == 'y' :
            myf2 = input(myf + "의 궁합음식을 입력: ")
            foods[myf] = myf2 

#foods.keys() : foods 데이터의 키값들만 조회
print("등록된음식: ")
for k in foods.keys() :
    print("%3s : %3s" % (k, foods[k]))
#foods : foods 데이터의 키값들만 조회
print("등록된음식: ")
for k in foods :
    print("%3s : %3s" % (k, foods[k]))
#foods.keys() : (키,값) 쌍인들
print("등록된음식: ")
for k,v in foods.items() :
    print("%3s : %3s" % (k, v))

########## 3.tuple(튜플) : 상수화된 리스트, ()
tp1 = (10,20,30)
print(tp1)
for t in tp1 :
    print(t)
print(tp1[0],tp1[1],tp1[2])
print(tp1[1:3])
#tp1.append(40) #튜플에는 요소 추가 안됨. 리스트로 변경 후 추가 가능
list1 = list(tp1) #튜플객체를 리스트 객체로 변환
list1.append(40)
tp1 = tuple(list1) #리스트객체를 튜플 객체로 변환
print(tp1)
#tp1[0] = 100 #튜플에는 요소 수정 안됨. 리스트로 변경 후 수정 가능
list1 = list(tp1) #튜플객체를 리스트 객체로 변환
list1[0] = 100
tp1 = tuple(list1) #리스트객체를 튜플 객체로 변환
print(tp1)
#tp1 요소의 합을 출력하기
print(sum(tp1))
print(sum(list1))
#tp1 요소중 첫번째, 두번째 요소만 출력하기
print(tp1[0],tp1[1])
print(tp1[2])
#tp1 요소를 역순으로 배치하기 => 변경불가
tp1.reverse() #오류 발생
#tp1 요소를 역순으로 출력하기
for i in range(len(tp1)-1,-1,-1) :
    print(tp1[i], end=" ")
    
print(tp1[::-1]) #시작인덱스(0):종료인덱스(마지막인덱스):증감식
                                            #증감식 : -1 : 뒤부터 시작

a,b,c,d = tp1     # a,b,c,d = (40,30,20,100) a=40, b=30, c=20, d=100
                  # 튜플의 요소의 갯수와 변수의 변수의 갯수가 동일해야 함
print(a,b,c,d)
a,b,c = tp1 # 오류발생. tp1의 갯수가 더 많음.
a,b,c,d,e = tp1 #오류발생. tp1의 갯수가 더 적음.

########## 4. set(셋) : 중복불가. 집합을 표현하는 객체.
set1 = {30,10,20,10}
print(set1) # 10요소는 한개만 저장. 순서지정 안됨.
#print(set1[0]) #인덱스 사용 안됨

set1 = {1,2,3,4,5}
set2 = {1,2,3,4,5,1,2,3,4,5}
print(set1)
print(set2)
set3 = {5,6,7,8}
# 교집합 : 두개의 집합에 공통 요소들
print("set1과 set2의 교집합: ", set1 & set2)
print("set1과 set3의 교집합: ", set1 & set3)
print("set1과 set3의 교집합: ", set1.intersection(set3)) #교집합 함수
# 합집합 : 두개의 집합에 속한 모든 요소들
print("set1과 set2의 합집합: ", set1 | set2)
print("set1과 set3의 교집합: ", set1 | set3)
print("set1과 set3의 교집합: ", set1.union(set3)) #합집합 함수

########## 5. comprehension 방식으로 Collection 객체 생성하기
# 규칙성이 있는 데이터를 Collection 객체 생성
numvers = []
#numvers 리스트에 1 ~ 10 까지의 데이터 저장하기
#1
numvers = [1,2,3,4,5,6,7,8,9,10]
print(numvers)
#2
numvers = []
for n in range(1, 11) :
    numvers.append(n)
print(numvers)
#3 conprehension 방식
numvers = [x for x in range(1,11)]
print(numvers)

# 문제 : 2부터 20까지 짝수들을 numvers 리스트에 저장하기
#1
numvers = [x*2 for x in range(1,11)]
print(numvers)
#2
numvers = [x for x in range(2, 21, 2)]
print(numvers)
#3
numvers = [x for x in range(1, 21) if x % 2 == 0]
print(numvers)

# 문제 : 1 ~ 20까지의 수 중 2의 배수와 3의 배수만을 nums 리스트에 데이터 저장하기
nums = [n for n in range(1, 21) if (n % 2 == 0) or (n % 3 == 0)]
print(nums)

#두개의 리스트 데이터를 각각 한개씩 튜플로 생성하고, 튜플을 리스트로 생성하기
clist = ['black', 'white']
slist = ['S', 'M', 'L']

#1
dlist = []          # [(black, S)...]
for c in clist :        # c : black...
    for s in slist :    # s : S...
        tp1 = (c,s)     # 튜플객체 생성
        dlist.append(tp1)
print(dlist)
#2
dlist = [(c,s) for c in clist for s in slist]
print(dlist)
#3
dlist = list((c,s) for c in clist for s in slist)
print(dlist)

4 컬렉션.pdf
0.25MB

728x90
반응형

'study > Python' 카테고리의 다른 글

[Python] 31. Test 답  (0) 2022.06.14
[Python] 31. Test  (0) 2022.06.14
[Python] 30. Test 답  (0) 2022.06.14
[Python] 30. Test  (0) 2022.06.14
[Python] 30. 기본, 변수와 식  (0) 2022.06.13