20221129-83 파이썬(역순,무작위,짜르기,정렬,리스트,튜플연산,딕셔너리,제거,키워드,

공현지·2022년 11월 29일

파이썬

목록 보기
5/11

reserve

# 리스트의 요소 순서를 역순으로 만들기 ( reverse() 함수 )
# reverse() 함수는 리스트의 모든 요소 순서를 거꾸로 만들어 주는 함수
# reverse() 함수는 원본 리스트 자체가 변경됨


listdata = list(range(5))
listdata.reverse()

print(list)

shuffle


# 리스트의 요소 무작위로 섞기 ( shuffle() 함수 )
# random 모듈의 shuffle() 함수는 리스트 요소를 무작위로 섞어주는 함수
# 실행 결과는 매번 달라짐
#from 모듈명 import 함수명
from random import shuffle

listdata  = list(range(1,11))   #1~10
for i in range(3):
    shuffle(listdata)
    print(listdata)



slice


# 리스트에서 특정 구간에 있는 요소 추출하기
# [1 : 4]   index번호 1번 부터 3번까지 추출
# [4 : ]    index번호 4번 부터 끝까지 추출

solarsys = ['태양', '수성', '금성', '지구', '화성', '목성', '토성', '천왕성', '해왕성']

rock_planets = solarsys[1:4]
gas_planets = solarsys[4:]
print('태양계의 암석형 행성:')
print(rock_planets)
print('태양계의 가스형 행성:');print(gas_planets)

태양계의 암석형 행성:
['수성', '금성', '지구']
태양계의 가스형 행성:
['화성', '목성', '토성', '천왕성', '해왕성']

slice2


# 리스트에서 홀수.짝수번째 요소만 추출하기

listdata = list(range(1,21))  #1~20까지의 순차적인 정수 리스트를 생성
print(listdata)

evenlist = listdata[1::2]           #index 번호 1부터 step 2로 슬라이싱
print(evenlist)                     #{2,4,6,8,10,12,14,16,18,20}

oddlist =listdata[::2]                #index 번호 0부터 step 2로 슬라이싱
print(oddlist)                        #{1,3,5,7,9,13,15,17,19}


sort

# 리스트 요소 정렬하기 ( sort() 함수 )
# sort() 함수는 리스트에 있는 요소를 오름차순으로 정렬해주는 역할을 함
# 내림차순 정렬을 하기 위해서는 sort(reverse = True


namelist = ['Mary', 'Sams', 'Aimy', 'Tom', 'Michale', 'Bob', 'Kelly']

namelist.sort()
print(namelist)    #리스트에 있는 요소를 오름차순으로 정렬함

namelist.sort(reverse =True)
print(namelist)

['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']

sorted


# 리스트 요소 정렬하기 ( sorted() 함수 )
# 파이썬 내장함수 sorted() 함수는 리스트의 모든 요소를 정렬한 결과 리스트를 리턴함


namelist = ['Mary', 'Sams', 'Aimy', 'Tom', 'Michale', 'Bob', 'Kelly']

ret1 = sorted(namelist)    #오름차순  정렬
ret2 = sorted(namelist, reverse=True)   #내림차순정렬

print(ret1)
print(ret2)

['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']

listln01

print ("---------------------------------------------------------------")
print ("--- 리스트 내포                                                --")
print ("--- 일반적인 리스트 생성법                                       --")
print ("---------------------------------------------------------------")

L = [] #0,1,4,9,,,,81
for k in range(10):
    L.append(k*k)
print(L)

print(L)


print ("--- <<<  위 코딩은 리스트 내포 리터럴 방식을 활용해서 아래와 같이 변경   >>>      --")
print ("--- for 의 변수가 식으로 들어간 변수와 동일해야함                              --")
print ("--- 0, 1, 2, 3…이 k에 할당될 때마다 식을 진행하여 리스트의 원소로 할당          --")

L = [k * k for k in range(10)]
print('리스트 내포 리터럴 방식 ->',L)


리스트 내포
일반적인 리스트 생성법
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
--- <<< 위 코딩은 리스트 내포 리터럴 방식을 활용해서 아래와 같이 변경 >>> --
--- for 의 변수가 식으로 들어간 변수와 동일해야함 --
--- 0, 1, 2, 3…이 k에 할당될 때마다 식을 진행하여 리스트의 원소로 할당 --
리스트 내포 리터럴 방식 -> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

listln02

print ("--- <<<  리스트 내포 리터럴 방식  >>>                                       --")
print ("--- k=0 → 0 % 2 = 0 → if 0 → 결과가 false로 expression 수행 X            --")
print ("--- k=1 → 1%2 = 1 → if 결과가 true로 expression 수행                      --")
print ("--- k=2 → 2 % 2 = 0 → if 0 → 결과가 false로 expression 수행 X            --")
print ("--- k=3 → 3%2 = 1 → if 결과가 true로 expression 수행                      --")

L = [k *k for k in range(10) if k%2] #홀수의 제곱만 리스트로 형성
print(L)

[1, 9, 25, 49, 81]

listln03

print ("------------------------------------------------------------------------------")
print ("--- 리스트 내포                                                                --")
print ("--- 20보다 작은 2의 배수와 3의 배수에 대해 그 두 수의 합이 7의 배수인 것들에 대해      --")
print ("--- 그 두 수의 곱을 출력하는 코드                                                --")
print ("--- 1) range(2, 20, 2) = [2, 4, 6, 8, 10, 12, 14, 16, 18]                   --")
print ("--- 2) range(3, 20, 3) = [3, 6, 9, 12, 15, 18]                               --")
print ("--- 3) i ← 20보다 작은 2의 배수, j ← 20보다 작은 3의 배수                       --")
print ("--- 4) 2 + 12 = 14 ← 7의 배수                                                 --")
print ("--- 5) 4 + 3 = 7 ← 7의 배수                                                   --")
print ("--- 6) 18 + 3 = 21 ← 7의 배수                                                 --")
print ("-------------------------------------------------------------------------------")

L = [(i,j , i*j)for i in range(2, 20 , 2 )for j in range(3,20,3) if (i +j) %7 ==0 ]
print(L)



[(2, 12, 24), (4, 3, 12), (6, 15, 90), (8, 6, 48), (10, 18, 180), (12, 9, 108), (16, 12, 192), (18, 3, 54)]

listln04

print ("--------------------------------------------------------------------------------")
print ("--- 리스트 내포                                                                --")
print ("--- 문장을 공백상태로 잘라오면서 대문자,소문자,길이를                                --")
print ("--- 리스트에 저장하는 코드                                                       --")
print ("--- split ()→ 공백을 기준으로 문자열 잘라 리스트 만들기                            --")
print ("--- stuff는 리스트 내포 문법 형태                                                --")
print ("--- 리스트 내포 안의 원소는 3개의 원소를 가진 리스트 형태로 하나                      --")
print ("--- upper : 대문자로 변환, lower: 소문자로 변환, len: 단어의 길이                  --")
print ("--- i 자체가 리스트                                                            --")
print ("------------------------------------------------------------------------------")


words = 'The quick brown fox jumps over the lazy dog'.split()
print('words->',words)

stuff = [[w.upper() , w.lower() , len(w) ] for w in words]
for i in stuff:
    print(i)

words-> ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']['THE', 'the', 3]
['QUICK', 'quick', 5]['BROWN', 'brown', 5]
['FOX', 'fox', 3]['JUMPS', 'jumps', 5]
['OVER', 'over', 4]['THE', 'the', 3]
['LAZY', 'lazy', 4]['DOG', 'dog', 3]

tuple01


print ("-------------------------------------------------------------------------")
print ("---      <<   튜플 연산        >>                                        --")
print ("---  1) t = (정수, 정수, 문자열)                                          --")
print ("---  2) u = t, (1, 2, 3, 4, 5) → 2개의 원소를 가진 튜플 → 원소로 튜플 가능  --")
print ("---  3) u2 = t2, (1, 2, 3) → 원소로 리스트 가능                           --")
print ("---  4) 원소로 사전도 가능                                                 --")
print ("--------------------------------------------------------------------------")

t = (12345, 54321, 'hello!')
u = t, (1,2,3,4,5)   #튜플 내부원소로 다른 튜플을 가질 수 있음
print("t, (1,2,3,4,5)-->",u)


t, (1,2,3,4,5)--> ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

tuple

#튜플 내부 원소로 리스트 가질 수 있음
# 튜플 내부 원소로 사전 가질 수 있음

t2 = [1,2,3]  #튜플 내부원소로 리스트 가질수 있음
u2 = t2,(1,2,4)
print("t2 ,(1,2,4)--->" , u2)

t3 = { 1:"abc" , 2:"def"}  # 튜플 내부 원소로 사전 가질 수 있음 
u3 = t3,(1,2,3)
print("t3, (1,2,3)-->", u3)


t2 ,(1,2,4)---> ([1, 2, 3], (1, 2, 4))
t3, (1,2,3)--> ({1: 'abc', 2: 'def'}, (1, 2, 3))

tuple

#list()와 tuple()내장 함수를 사용하여 리스트와 튜플을 상호 변환할 수 있음

T = (1,2,3,4,5)

print('t->' , T)

# T[0] = 100 -->Tuple 은 변환 안됨

L = list(T)
L[0] = 100
print('L->' ,  L)

t-> (1, 2, 3, 4, 5)
L-> [100, 2, 3, 4, 5]

dict01

#딕셔너리(dictionary)
# 문제 각 Row(행)을 리스트외 Dictionary를 사용 작성
address3 = {
    '1': { 'name': '이순신', 'email':'hong@gmail.com',  'hp-num': '010-2234-9678'},
    '2': {'name': '대조영', 'email': 'dae@gmail.com',  'hp-num': '010-1234-5679'},
    '3': { 'name': '강감찬', 'email': 'kang@gmail.com', 'hp-num': '010-6783-3670'},
    '4': {'name': '김유신', 'email': 'kim@gmail.com',  'hp-num': '010-7823-3578'},
}

print("address3->" , address3)

for key in address3:
    addr_dict = address3[key]
    print("addr_dict->" , addr_dict)

address3-> {'1': {'name': '이순신', 'email': 'hong@gmail.com', 'hp-num': '010-2234-9678'}, '2': {'name': '대조영', 'email': 'dae@gmail.com', 'hp-num': '010-1234-5679'}, '3': {'name': '강감찬', 'email': 'kang@gmail.com', 'hp-num': '010-6783-3670'}, '4': {'name': '김유신', 'email': 'kim@gmail.com', 'hp-num': '010-7823-3578'}}
addr_dict-> {'name': '이순신', 'email': 'hong@gmail.com', 'hp-num': '010-2234-9678'}
addr_dict-> {'name': '대조영', 'email': 'dae@gmail.com', 'hp-num': '010-1234-5679'}
addr_dict-> {'name': '강감찬', 'email': 'kang@gmail.com', 'hp-num': '010-6783-3670'}
addr_dict-> {'name': '김유신', 'email': 'kim@gmail.com', 'hp-num': '010-7823-3578'}

del


# 사전의 특정 요소 제거하기 ( del 키워드 )

names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
         'Michale':27115, 'Bob':5887, 'Kelly':7855}

del names['Sams']   #names 요소중 키가 'Sams'인 요소를 사전에서 제거
print(names)

{'Mary': 10999, 'Aimy': 9778, 'Tom': 20245, 'Michale': 27115, 'Bob': 5887, 'Kelly': 7855}

del_change

# 사전의 특정 요소값 변경하기
# 아기이름 : 출생아수


names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
         'Michale':27115, 'Bob':5887, 'Kelly':7855}

names['Aimy'] = 10000
print(names)

{'Mary': 10999, 'Sams': 2111, 'Aimy': 10000, 'Tom': 20245, 'Michale': 27115, 'Bob': 5887, 'Kelly': 7855}

dict_in


# 사전에 특정 key가 존재하는지 확인하기 ( in 키워드 )
# in 키워드를 이용하여 특정 값이 사전의 key로 존재하는지 확인할 수 있다.

names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
         'Michale':27115, 'Bob':5887, 'Kelly':7855}

k = input('이름을 입력하세요: ')

if k in names:
    print('이름이 <%s>인 출생아수는 <%d>명 입니다' %(k, names[k]))
else:
    print('자료에 <%s>인 이름이 존재하지 않습니다.' %k)

dict_items


# 사전 요소를 모두 추출하기 ( items() 함수 )
# items() 함수는 사전에서 key:value 를 모두 추출하여 리턴
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
         'Michale':27115, 'Bob':5887, 'Kelly':7855}

items = names.items()
print(items)

for items in items:
    print(items)
    

dict_items([('Mary', 10999), ('Sams', 2111), ('Aimy', 9778), ('Tom', 20245), ('Michale', 27115), ('Bob', 5887), ('Kelly', 7855)])
('Mary', 10999)
('Sams', 2111)
('Aimy', 9778)
('Tom', 20245)
('Michale', 27115)
('Bob', 5887)
('Kelly', 7855)

dict_keys


# 사전에 key만 추출하기 ( keys() 함수 )
# key() 함수는 사전의 key만 추출하여 리턴



names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
         'Michale':27115, 'Bob':5887, 'Kelly':7855}

ks = names.keys()
print(ks)

for k in ks:
    print('key:%s  \tValue:%d' %(k,names[k]))
    

dict_keys(['Mary', 'Sams', 'Aimy', 'Tom', 'Michale', 'Bob', 'Kelly'])
key:Mary Value:10999
key:Sams Value:2111
key:Aimy Value:9778
key:Tom Value:20245
key:Michale Value:27115
key:Bob Value:5887
key:Kelly Value:7855

write


# 파일 생성(파일 쓰기)
# test.txt 파일 생성함


file = open('test.txt','w')  #쓰기모드로 열기

file.write('hello')     #test.txt파일에 hello쓰기
file.close()            #파일닫기


🔽내가 지정해준 파일 생성됨

read


# 파일 읽기
# test.txt 파일을 읽기 모드로 열고, 내용을 출력

file = open('test.txt', 'r')   #읽기모드로 test.txt 파일 열기
str = file.read()        #text.txt 파일의 모든 내용을 읽어와서 str변수에 저장함
print(str)
file.close()    #파일닫기 

hello

write_encoding

# 사용자가 입력한 내용을 파일로 저장 - write() 함수

text = input('파일에 저장할 내용을 입력하세요?')

                         #엔코딩해줘야 한글 안깨짐 
f = open('data.txt', 'w' , encoding='utf-8')  #파일을 쓰기 모드로 오픈
f.write(text)
f.close()


🔽파일생성댐

read_encoding


#read


f = open('data.txt', 'r')
data = f.read()
print(data)
f.close()


0개의 댓글