Introduction to Lists
Lists: 다양한 종류의 정보의 나열들을 하나의 변수 이름에 저장할 수 있는 데이터 타입
list_name = [item_1, item_2]
empty_list = []
기본적인 리스트의 구성은 위와 같습니다.
[ ] 이 표시 안에 있는 것들을 items라고 부르며 ,리스트는 빈 리스트로도 구성될 수 있습니다.
list는 string과 비슷하지만, 몇 가지의 차이점이 있습니다.
Access by Index : list_name[index]
리스트의 각각의 아이템들에 대해서 index를 통해 접근할 수 있습니다.
인덱스는 리스트 내의 아이템들의 위치를 알려주는 주소와 같습니다.
인덱스를 통한 접근은 다음과 같이 진행 할 수 있습니다. 리스트의 인덱스 또한 0부터 시작합니다.
numbers = [5, 6, 7, 8]
print numbers[0] + numbers[2] #12
print numbers[1] + numbers[3] #14
리스트의 인덱스는 다른 변수들과 비슷한 작동방식을 보입니다.
변수를 할당하는 것 외에도 접근해서 변환하는 것이 가능합니다.
다음 코드를 실행시켜보시면 명백해집니다.
zoo_animals = ["pangolin", "cassowary", "sloth", "tiger"]
zoo_animals[2] = "hyena"
print zoo_animals
#["pangolin", "cassowary", "hyena", "tiger"]
zoo_animals = ["pangolin", "cassowary", "sloth", 123 ]
if len(zoo_animals) > 3: #list에 len을 걸면 list 안의 item 갯수를 묻는다.
print "The first animal at the zoo is the " + zoo_animals[0]
print "The second animal at the zoo is the " + zoo_animals[1]
print "The third animal at the zoo is the " + zoo_animals[2]
print "The fourth animal at the zoo is the " + str(zoo_animals[3])
리스트 값 추가 .append(item)
letters = ['a', 'b', 'c']
letters.append('d')
print len(letters) #4
print letters #['a', 'b', 'c', 'd']
# -*- coding: utf-8 -*- suitcase = []
suitcase=[]
suitcase.append("sunglasses")
suitcase.append("water")
suitcase.append("cloth")
list_length = len(suitcase) # suitcase의 길이를 list_length에 할당해주세요
print "There are %d items in the suitcase." % (list_length)
print suitcase
"""There are 3 items in the suitcase.
['sunglasses', 'water', 'cloth']"""
리스트 값 삭제 .remove(item)
beatles = ["john","paul","ringo","stuart"]
beatles.remove("stuart")
print beatles
#['john', 'paul', 'ringo']
List Slicing [ x : y : z ]
[ x : y : z ] = x번째 ~ y번째 미만 인덱스를 z만큼 건너뛰며 진행
l = [i ** 2 for i in range(1, 11)]
print l[2:9:2]
#[9, 25, 49, 81]
[2:9] -> 숫자 2~8까지라는 의미가 아닌 2번째~8번째 인덱스라는 의미임
위의 예제의 경우
"1~10의 범위에서 2번째~8번째 인덱스를 2칸씩 건너서 조건에 맞게 출력해라"는 의미로
인덱스는 0번째에서 시작해 2번째(3),4번째(5),6번째(7),8번째(9)를 조건에 맞춰 출력
[x:] / [:y] / [::z]
to_five = ['A', 'B', 'C', 'D', 'E']
print to_five[3:]
# prints ['D', 'E']
print to_five[:2]
# prints ['A', 'B']
print to_five[::2]
# print ['A', 'C', 'E']
print to_five[::-1]
# ['E', 'D', 'C', 'B', 'A']
print to_five[5:1:-1] #1번 인덱스 전까지 -1씩 역순으로 진행
#['E','D','C']
print to_five[5:0:-2] #0번 인덱스 전까지 -2씩 역순으로 진행
#['E','C']
print to_five[5:0:1] #[], 뒤에서부터 +1 시작하면 값이 없으므로 빈값출력
범위 내에서 출력
my_list = range(1, 11) # List of numbers 1 - 10
print my_list[::2]
#[1, 3, 5, 7, 9]
my_list = range(1, 11)
backwards = my_list[::-1]
print backwards
#[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
to_one_hundred = range(101)
backwards_by_tens = to_one_hundred[::-10]
print backwards_by_tens
#[100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
# -*- coding: utf-8 -*- suitcase = []
"""cat,dog,frog 인덱스로 분할해서 각각의 변수에 할당해봅시다."""
animals = "catdogfrog"
# The first three characters of animals
cat = animals[:3]
print cat
# The fourth through sixth characters
dog = animals[3:6]
print dog
# From the seventh character to the end
frog = animals[6:]
print frog
upgrade
str = "ABCDEFGHIJ"
start, end, stride = 1, 6, 2
print str[start:end:stride] #BDF
garbled = "!XeXgXaXsXsXeXmX XtXeXrXcXeXsX XeXhXtX XmXaX XI"
message = garbled[::-2]
print message
#I am the secret message!
garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt\
mXXeXsXXXsXaXXXXXXgXeX!XX"
message = filter(lambda x: x != "X", garbled)
print message
#I am another secretmessage!
lambda는 function 페이지 참조
tangerineshower.tistory.com/49
.index(item)
반대로, 아이템의 내용을 통해 인덱스에 접근할 수 있는 방법도 있습니다.
animals = ["ant", "bat", "cat"]
print animals.index("bat") #1
.insert(index, item)
또 insert 명령문을 통해서 리스트 안에 아이템을 집어넣는 것 또한 가능합니다.
ant 와 bat 사이에 dog 끼워넣고 모든 인덱스가 뒤로 밀리기
animals = ["ant", "bat", "cat"]
animals.insert(1, "dog") #1번자리에 dog 넣기 #끼워넣기에는 insert
print animals
#["ant", "dog","bat", "cat"]
# -*- coding: utf-8 -*- suitcase = []
""".index(item) 명령문을 이용해 “duck"의 인덱스를 찾고 그것을 duck_index에 할당해주세요.
그 다음 .insert(index, item) 명령문을 통해 “cobra" 가 바로 그 인덱스에 할당되게 해주세요"""
animals = ["aardvark", "badger", "duck", "emu", "fennec fox"]
duck_index = animals.index("duck")
print duck_index
animals.insert(2,"cobra")
print animals
#2
#['aardvark', 'badger', 'cobra', 'duck', 'emu', 'fennec fox']
For 루프에 대해서 1
for variable in list_name:
for문 코드수행
for a in list_name이 적용되면 index 0번부터 차례로 접근해 for문 코드를 수행하겠다는 의미가 됩니다.
마지막 아이템을 통과하면 for문을 빠져나옵니다. variable은 그 아이템이 할당되는 변수가 됩니다.
my_list = [1,9,3,8,5,7]
for number in my_list:
print number
"""
1
9
3
8
5
7 """
아이템이 각각 제곱수가 되도록 변경해봅시다.
for number in my_list:
print number**2
"""
1
81
9
64
25
49"""
sort()
sort문을 사용하게 되면 알파벳의 기호에 따라 순서의 정렬이 발생합니다.
animals = ["cat", "ant", "bat"]
animals.sort()
for animal in animals:
print animal
"""ant
bat
cat"""
problem) for 문을 사용해서 start_list에 반복문을 적용시키고
.append()구문을 이용해 x**2의 값을 square_list.의 값에 적용시켜봅시다
이후 .sort()구문을 이용해 값을 정려해봅시다. 즉 [1,4,9,16,25] 이 값이 나오도록
start_list = [5, 3, 1, 2, 4]
square_list = []
#여기에 코드를 작성해주세요
print square_list
sol)
이게 정답
# -*- coding: utf-8 -*- suitcase = []
"""
problem) for 문을 사용해서 start_list에 반복문을 적용시키고
.append()구문을 이용해 x**2의 값을 square_list.의 값에 적용시켜봅시다
이후 .sort()구문을 이용해 값을 정렬해봅시다.
즉 [1,4,9,16,25] 이 값이 나오게 하면 되는 것이죠."""
start_list = [5, 3, 1, 2, 4]
square_list = []
for a in start_list:
square_list.append(a**2)
print square_list #[25, 9, 1, 4, 16]
square_list.sort()
print square_list #[1, 4, 9, 16, 25]
for ~ in: 사용 미숙
이것은 내 엉터리 오답
# -*- coding: utf-8 -*- suitcase = []
"""
problem) for 문을 사용해서 start_list에 반복문을 적용시키고
.append()구문을 이용해 x**2의 값을 square_list.의 값에 적용시켜봅시다
이후 .sort()구문을 이용해 값을 정렬해봅시다.
즉 [1,4,9,16,25] 이 값이 나오게 하면 되는 것이죠."""
start_list = [5, 3, 1, 2, 4]
square_list = []
for list in start_list:
print list**2
square_list.append(list)
square_list.sort()
print square_list
Introduction to Dictinaray
딕셔너리는 리스트와 비슷합니다.
그러나 딕셔너리에서는 인덱스가 아니라, 키(key)라는 새로운 개념을 통해 접근하게 되어있습니다. 키는 스트링일수도, 숫자일 수도 있습니다. 리스트는 [ ]으로 감싸져있지만 딕셔너리는 { } 이 문자에 감싸지는 것을 원칙으로 삼고 있습니다.
d = {'key1' : 1, 'key2' : 2, 'key3' : 3}
딕셔너리 d는 3개의 key-value 페어들을 가지고 있습니다. key 'key1'은 value 1을 가르키며 ‘key2'는 ’2'를 'key3'은 ‘3'을 가리키고 있습니다. 딕셔너리는 e-mail address를 유저의 이름과 연결시키는 등 다양한 분야에서 활용 할 수 있습니다.
residents = {'Puffin' : 104, 'Sloth' : 105, 'Burmese Python' : 106}
print residents['Puffin'] #104
print residents['Sloth'] #105
print residents['Burmese Python'] #106
딕셔너리 출력
print d.items() / keys() / values()
d={
"name":"sunyoung",
"age":23,
"gender":"women"
}
print d.items() #key와 value 모두 출력
print d.keys() #key만 출력
print d.values() #value만 출력
#[('gender', 'women'), ('age', 23), ('name', 'sunyoung')]
#['women', 23, 'sunyoung']
#['gender', 'age', 'name']
딕셔너리 추가 , len , 삭제, 값 변경
List와 마찬가지로 Dictinary는 mutable합니다. 이것은 생성 된 이후에도 변경이 될 수 있다는 것을 의미하는데요. 이것의 장점 중의 하나는 우리가 그 딕셔너리에 새로운 key와 value값을 할당 할 수 있다는 것입니다.
dict_name[new_key] = new_value
비어있는 newdict = {}라고 한다면 빈 딕셔너리를 위미합니다. new_list =[]이 빈 리스트를 의미하듯이 말이죠
len()을 딕셔너리에 적용시키면 그것은 key-value의 페어가 몇 페어가 있는지를 의미합니다.
+del이라는 명령어로 삭제 del dict_name[key_name]
newdict={}
newdict['1234']=123
newdict['123456']=1234
print newdict #{'1234': 123, '123456': 1234}
print len(newdict) #2
del newdict['1234']
print newdict #{'123456': 1234}
print len(newdict) #1
+특정한 키에 값을 변경해서 넣고 싶다면 dict_name[key] = new_value
# -*- coding: utf-8 -*- suitcase = []
"""problem) 'Sloth'와 'Bengal Tiger'를 zoo_animal에서 삭제해주세요
'Rockhopper penguin'에게 'Arctic Exhibit'대신에 다른 값을 할당해주세요!"""
zoo_animals = { 'Sloth' : 'Rainforest Exhibit',
'Bengal Tiger' : 'Jungle House',
'Atlantic Puffin' : 'Arctic Exhibit',
'Rockhopper Penguin' : 'Arctic Exhibit'}
# 딕셔너리는 여러줄에 걸쳐 쓰일 수도 있습니다.
del zoo_animals['Sloth']
del zoo_animals['Bengal Tiger']
zoo_animals['Rockhopper Penguin']='Korea'
print zoo_animals
#{'Rockhopper Penguin': 'Korea', 'Atlantic Puffin': 'Arctic Exhibit'}
For 루프에 대해서 2
# in의 역할
#print number뒤에 ,콤마 찍으면 한줄로 배열된다
for number in range(5):
print number,
"""0 1 2 3 4"""
---------------------
for number in range(5):
print number
"""
0
1
2
3
4"""
문자열 안의 값도 하나씩 출력 가능
for letter in "Eric":
print letter,
#E r i c
조건 달기
1.
evens_to_50 = [i for i in range(51) if i % 2 == 0]
#해석: range(51)에서 i%2==0일 때의 i를 evens_to_50이라고 하겠다
print evens_to_50
=
my_list = range(51)
evens_to_50 = [i for i in my_list if i % 2 == 0]
print evens_to_50
#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
2.
new_list = [x for x in range(1, 6)]
doubles = [x * 2 for x in range(1, 6)]
doubles_by_3 = [x * 2 for x in range(1, 6) if (x * 2) % 3 == 0]
#1~5 사이에서 (x * 2) % 3 == 0를 만족할 때, x*2를 doubles_by_3이라고 하자 ->3만 만족
print new_list
print doubles
print doubles_by_3
#[1, 2, 3, 4, 5]
#[2, 4, 6, 8, 10]
#[6]
problem) 12까지의 짝수들만 골라 제곱수를 할당하는 식을 채워주세요
even_squares = ________________________
print even_squares
sol)
even_squares=[x**2 for x in range(1,13) if x%2==0]
print even_squares
#[4, 16, 36, 64, 100, 144]
c = ['C' for x in range(5) if x < 3]
print c
#['C', 'C', 'C']
numbers = [1, 3, 4, 7]
for number in numbers:
if number > 6:
print number #7
problem)
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
a에대한 루프문을 이용해서 짝수면 출력하고 홀수면 출력하지 않는 문장을 만들어봅시다
hint)%2 == 0의 방식을 이용해 봅시다
sol)
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
for num in a:
if num%2==0:
print num
# 리스트
for loops 는 리스트에 있는 가장 좌측에 있는 아이템부터 우측으로 접근하게 해줍니다.
a = ["List", "of", "some", "sort"]
for item in a:
print item
#List
#of
#some
#sort
# 딕셔너리
딕셔너리는 리스트처럼 순서대로 출력 X + d[key] = value 값을 말한다.
d = {
"name": "Eric",
"age": 26
}
1.
for key in d:
print key, d[key],
#age 26 name Eric
2.
for key in d:
print key,
print d[key],
#age name
# 26 Eric
Lists + Functions
#10보다 작은 숫자가 몇개인지 알아보는 함수
def count_small(numbers):
total = 0
for n in numbers:
if n < 10:
total = total + 1
return total
lotto = [4, 8, 15, 16, 23, 42]
small = count_small(lotto)
print small #2
★String Looping
problem)
price 라는 이름의 딕셔너리를 만들어봅시다, 각각의 물건의 가격을 의미합니다
"banana": 4, "apple": 2, "orange": 1.5, "pear": 3
stock 이라는 이름의 재고를 갖는 딕셔너리를 만들어봅시다.
apple
price: 2
stock: 0
과 같이 각각의 키 값에 대해 가격과 재고를 알려주는 loop문을 만들어봅시다
# -*- coding: utf-8 -*- suitcase = []
price={"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}
stock={"banana": 10, "apple": 12, "orange": 3, "pear": 5}
for a in price: #a 안에는 각각의 키 값이 들어간다
print a
print "price:"+str(price[a])
print "stock:"+str(stock[a])
print
"""
orange
price:1.5
stock:3
pear
price:3
stock:5
banana
price:4
stock:10
apple
price:2
stock:12"""
sol)
for food in prices:
print food
print "price: %s" % prices[food]
print "stock: %s" % stock[food]
도 가능
problem)
각각의 과일을 전부 팔았을 때의 판매가와, 전체 과일들의 판매가의 총합을 구해봅시다
sol)
# -*- coding: utf-8 -*- suitcase = []
price={"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}
stock={"banana": 10, "apple": 12, "orange": 3, "pear": 5}
total=0
for a in price: #a 안에는 각각의 키 값이 들어간다
print a
print "price:" + str(price[a])
print "stock:" + str(stock[a])
print"판매가:"+str(price[a]*stock[a])
print
total += price[a]*stock[a]
print "전체판매가:"+str(total)
"""
orange
price:1.5
stock:3
판매가:4.5
pear
price:3
stock:5
판매가:15
banana
price:4
stock:10
판매가:40
apple
price:2
stock:12
판매가:24
전체판매가:83.5"""
sol) 함수로 구현한 경우
price={"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}
stock={"banana": 10, "apple": 12, "orange": 3, "pear": 5}
total = 0
for food in price:
print food
print price[food] * stock[food]
total = total + price[food] * stock[food]
print total
print
"""
orange
4.5
4.5
pear
15
19.5
banana
40
59.5
apple
24
83.5
"""
# 리스트 안의 값 더하는 함수
def sum(numbers): #n의 인수 1,2,5,10,13이 numbers 안에 인수로 들어가고
total = 0
for number in numbers:
total += number
return total
n = [1, 2, 5, 10, 13]
print sum(n) #31
위에서는 sum함수를 만들었고 numbers라는 파라메터를 만들어주었습니다.
n이라는 리스트를 넣어주고 sum 함수를 넣어주었습니다.
PRACTICE
딕셔너리에서 특정 키 값으로 접근하는 법
animal = {
"name": "Mr. Fluffles",
"sounds": ["meow", "purr"]
}
print animal["name"] #Mr. Fluffles
print animal["sound"] #['meow', 'purr']
1. 각각의 student 의 리스트에 대해 접근해, 각각의 학생들에게 data를 접근해서 (for문을 사용해야 되겠죠?) 다음의 데이터를 출력하게해주세요
print the student's name
print the student's homework
print the student's quizzes
print the student's tests
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0 ,92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
students = [lloyd, alice, tyler]
for student in students:
print student["name"]
print student["homework"]
print student["quizzes"]
print student["tests"]
print
"""
Lloyd
[90.0, 97.0, 75.0, 92.0]
[88.0, 40.0, 94.0]
[75.0, 90.0]
Alice
[100.0, 92.0, 98.0, 100.0]
[82.0, 83.0, 91.0]
[89.0, 97.0]
Tyler
[0.0, 87.0, 75.0, 22.0]
[0.0, 75.0, 78.0]
[100.0, 100.0]
"""
2. students에 alice, lloyd , tyler가 채워진 리스트를 만들어봅시다.
get_class_average 라는 함수를 이용해서 학생들의 평균 값을 얻어내고 그 값을 해봅시다.
그 값을 get_letter_grade 를 활용해서 전체 학생들의 평균 grade를 print 해봅시다
"""
1.students에 alice, lloyd , tyler가 채워진 리스트를 만들어봅시다.
2.get_class_average 라는 함수를 이용해서 학생들의 평균 값을 얻어내고 그 값을 해봅시다.
3. 그 값을 get_letter_grade 를 활용해서 전체 학생들의 평균 grade를 print 해봅시다"""
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
# Add your function below!
def average(numbers):
total = sum(numbers)
total = float(total)
return total/len(numbers)
def get_average(student):
homework = average(student["homework"])
quizzes = average(student["quizzes"])
tests = average(student["tests"])
return 0.1 * homework + 0.3 * quizzes + 0.6 * tests
def get_letter_grade(score):
if score >= 90:
return "A"
elif score >=80:
return "B"
elif score >=70:
return "C"
elif score >=60:
return "D"
else:
return "F"
def get_class_average(class_list):
results = []
for student in class_list: #3명의 학생들에 대한 리스트값이 전달
student_avg = get_average(student)
results.append(student_avg)
return average(results)
students = [lloyd, alice, tyler]
avg = get_class_average(students)
print(avg) #83.8666666667
print(get_letter_grade(avg)) #B
get_average라는 함수가 학생의 딕셔너리(like lloyd,alice,or tyler) 를 인풋으로 받고 그들의
가중치된 평균을 반환한다고 해봅시다.
1. get_average라는 함수를 정의하고 student라는 이름의 매개변수 하나를 갖는 다는 함술르 정의합니다.
2. homework라는 변수를 만들고 그 안에 studnet["homework"]의 average() 를 이용해 값을 저장해봅시다.
3. 3번을 반복해 "quizzes", "tests"에도 동일하게 적용을 해봅시다.
4. total이라는 변수에 homework 는 10% quizzes 는 30% tests 난 60%의 가중치를 가지게 해서 값을 저장해봅시다
5. 그 값을 반환해봅시다.
이번에는 score라는 이름의 매개변수를 받아 작동하는 get_letter_grade 라는 함수를 만들어 볼 생각입니다. 이 함수는 학생이 받아야 하는 성적(string)에 대해 반환합니다. 'score'라는 매개변수를 갖는 ‘get_letter_grade’ 라는 함수를 정의해봅시다. score는 하나의 숫자 값을 받는 것을 예상하고 있습니다.
함수 안에 if: / elif: / else: statements를 다음 처럼 이용할 겁니다.
score 가 90 이상: return "A"
Else if score 가 80 이상: return "B"
Else if score 가 70 이상: return "C"
Else if score 가 60 이상: return "D"
else: return "F"
‘class list‘ 라는 매개변수를 갖는 get_class_average 함수를 정의해주세요 class_list 는 3명의 학생들에 대한 리스트값이 전달 될 것입니다.
1. 함수의 본문(body)에 results라는 빈[emplty] 리스트 생성해주세요.
각각의(for each) class_list 안(in)에 있는 student에 접근해서 get_average(student) 값을 계산하고 results.append() 를 이용해 그 결과 값을 result에 추가시켜 주도록 합시다.
2. average() 함수를 불러들여서 results에 있는 값들의 평균을 반환(return)해주도록 합시다.
'컴퓨터 언어 > python' 카테고리의 다른 글
Python 7. LOOP (0) | 2020.07.15 |
---|---|
파이썬 기초1 (0) | 2020.07.15 |
Python 4. 파이썬 함수 (0) | 2020.07.14 |
Python 3. Conditionals ana Control Flow (0) | 2020.07.14 |
Python 2. String & Console out (0) | 2020.07.14 |