
List/Dictionary Comprehensions
for문으로 리스트 컴프리헨션 기능을 구현
numbers = [1, 2, 3]
new_list = []
for n in numbers:
add_1 = n + 1
new_list.append(add_1)
print(new_list)
리스트 컴프리헨션 사용
new_item for item in list 키워드 입력numbers = [1, 2, 3]
new_list = [n + 1 for n in numbers]
print(new_list)
for문보다 훨씬 짧은 코드로 같은 기능 구현 가능
특정 순서를 가진 시퀀스(sequences)에 모두 적용 가능
(list, range, string, tuple...)
# 문자열에 적용
word = "computer"
letters_list = [letter for letter in word]
print(letters_list)
# 범위에 적용
range_list = [num * 2 for num in range(1, 5)]
print(range_list)
new_list = [ new_item for item in sequence if test ]
→ test를 통과했을 경우에만 new_item 수행
names = ["Alex", "Beth", "Caroline", "Dave", "Eleanor", "Freddie"]
short_names = [name.upper() for name in names if len(name) < 5]
print(short_names)
Squaring Numbers
리스트 컴프리헨션으로 각 원소의 제곱수를 포함한 새 리스트 생성
numbers = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
# 🚨 Do Not Change the code above 👆
# Write your 1 line code 👇 below:
squared_numbers = [number ** 2 for number in numbers]
# Write your code 👆 above:
print(squared_numbers)
Filtering Even Numbers
리스트 컴프리헨션으로 각 원소의 자료형을 변경하고, 그 중 짝수만 포함한 새 리스트 생성
list_of_strings = input().split(',')
# 🚨 Do not change the code above
# TODO: Use list comprehension to convert the strings to integers 👇:
numbers = [int(str) for str in list_of_strings]
# TODO: Use list comprehension to filter out the odd numbers
# and store the even numbers in a list called "result"
result = [num for num in numbers if num % 2 == 0]
# Write your code 👆 above:
print(result)
Data Overlap
리스트 컴프리헨션으로 file1과 file2에 공통으로 포함된 숫자를 포함한 새 리스트 생성
- 출력 결과는 문자열이 아닌 정수형이어야 한다
- 힌트
- readlines() 메소드
- in 키워드
📄 file1.txt
3
6
5
8
33
12
7
4
72
2
42
13
📄 file2.txt
3
6
13
5
7
89
12
3
33
34
1
⌨️ main.py
with open("file1.txt") as file1:
list1 = file1.readlines()
with open("file2.txt") as file2:
list2 = file2.readlines()
result = [int(num) for num in list1 if num in list2]
# Your code above 👆
print(result)
이전 버전의 코드를 리스트 컴프리헨션으로 간략하게 수정
🔍 유의 사항
- 이전 버전 : exit를 입력 시 CSV파일에 저장할 빈 리스트 missing_states 생성 후 원소 추가
수정 버전 : 해당 부분을 리스트 컴프리헨션으로 간략하게 줄이기
⌨️ main.py
import turtle
import pandas
screen = turtle.Screen()
screen.title("U.S. States Game")
image = "blank_states_img.gif"
screen.addshape(image)
turtle.shape(image)
screen.tracer(0)
data = pandas.read_csv("50_states.csv")
all_states = data.state.to_list()
guessed_states = []
while len(guessed_states) < 50:
screen.update()
answer_state = screen.textinput(title=f"{len(guessed_states)}/50 States Correct",
prompt="What's another state's name?").title()
if answer_state == "Exit":
# 수정 버전
missing_states = [state for state in all_states if state not in guessed_states]
new_data = pandas.DataFrame(missing_states)
new_data.to_csv("states_to_learn.csv")
break
if answer_state in all_states:
guessed_states.append(answer_state)
pin = turtle.Turtle()
pin.hideturtle()
pin.penup()
state_data = data[data.state == answer_state]
pin.goto(int(state_data.x), int(state_data.y))
pin.write(answer_state)
new_key:new_value for item in sequence }new_key:new_value for (key, value) in dict.items() }new_key:new_value for (key, value) in dict.items() if test }import random
names = ["Alex", "Beth", "Caroline", "Dave", "Eleanor", "Freddie"]
# 각 학생에게 1에서 100 사이의 점수 중 하나를 랜덤으로 부여한 딕셔너리 생성
students_scores = {student:random.randint(1, 100) for student in names}
print(students_scores)
# 60점 이상인 학생만 포함한 딕셔너리 생성
passed_students = {student:grade for (student,grade) in students_scores.items() if grade>60}
print(passed_students)
Dictionary Comprehension 1
딕셔너리 컴프리헨션으로 문장의 각 단어를 취하여 글자 수를 계산하는 새 딕셔너리 생성
- 힌트
- split()
- 'Swallow?' 의 물음표도 단어로 계산 (즉, 해당 문자열의 길이는 8)
sentence = "What is the Airspeed Velocity of an Unladen Swallow?"
# 🚨 Don't change code above 👆
# Write your code below 👇
result = {word:len(word) for word in sentence.split()}
print(result)
ictionary Comprehension 2
섭씨 온도(temp_c)를 화씨 온도(temp_f)로 변환하는 새 딕셔너리 생성
- 변환 공식 : (temp_c * 9/5) + 32 = temp_f
weather_c = {
"Monday": 12, "Tuesday": 14, "Wednesday": 15,
"Thursday": 14, "Friday": 21, "Saturday": 22, "Sunday": 24
}
# 🚨 Don't change code above 👆
# Write your code 👇 below:
weather_f = {day:(temp * 9/5) + 32 for (day, temp) in weather_c.items()}
print(weather_f)
new_key:new_value for (index, row) in dataframe.iterrows() }import pandas
student_dict = {
"student": ["Angela", "James", "Lily"],
"score": [56, 76, 98]
}
student_data_frame = pandas.DataFrame(student_dict)
# 1-1. for문으로 딕셔너리 키 반복 출력
for (key, value) in student_dict.items():
print(key)
# 1-2. for문으로 딕셔너리 값 반복 출력
for (key, value) in student_dict.items():
print(value)
# 2-1. 데이터 프레임의 iterrows 메소드로 인덱스 값 반복 출력
for (index, row) in student_data_frame.iterrows():
print(index)
# 2-2. 데이터 프레임의 iterrows 메소드로 행 반복 출력
for (index, row) in student_data_frame.iterrows():
print(row)
# 2-2-1. 데이터 프레임의 iterrows 메소드로 행의 특정 열 반복 출력
for (index, row) in student_data_frame.iterrows():
print(row.student)
# 2-2-2. 데이터 프레임의 iterrows 메소드로 조건을 만족하는 행의 특정 열 반복 출력
for (index, row) in student_data_frame.iterrows():
if row.score > 60:
print(row.student)
[ 출력 결과 ]
# 1-1.
student
score
# 1-2.
['Angela', 'James', 'Lily']
[56, 76, 98]
# 2-1.
0
1
2
# 2-2.
student Angela
score 56
Name: 0, dtype: object
student James
score 76
Name: 1, dtype: object
student Lily
score 98
Name: 2, dtype: object
# 2-2-1.
Angela
James
Lily
# 2-2-2.
James
Lily
단어를 입력하면 각 알파벳과 일치하는 나토 알파벳 음성기호의 목록을 반환하는 프로그램
📄 nato_phonetic_alphabet.csv
letter,code
A,Alfa
B,Bravo
C,Charlie
D,Delta
E,Echo
F,Foxtrot
G,Golf
H,Hotel
I,India
J,Juliet
K,Kilo
L,Lima
M,Mike
N,November
O,Oscar
P,Papa
Q,Quebec
R,Romeo
S,Sierra
T,Tango
U,Uniform
V,Victor
W,Whiskey
X,X-ray
Y,Yankee
Z,Zulu
⌨️ main.py
import pandas
data = pandas.read_csv("nato_phonetic_alphabet.csv")
# 1. 딕셔너리 생성
phonetic_dict = {row.letter:row.code for (index, row) in data.iterrows()}
# 2. 사용자가 입력한 단어 각각의 문자에 대한 음성규약 단어 리스트 생성
user_word = input("Enter a word : ").upper()
output_list = [phonetic_dict[letter] for letter in user_word]
print(output_list)