เฉลยโจทย์: Comprehension#
ข้อ 1: List comprehension 1#
จงเปลี่ยนลิสต์ของชื่อให้เป็นลิสต์ที่มีแต่ชื่อภาษาอังกฤษ และชื่อภาษาอังกฤษจะต้องถูกเปลี่ยนเป็นชื่อที่ขึ้นต้นด้วยตัวใหญ่ที่เหลือตัวเล็กทั้งหมด ให้เขียนสองแบบ
แบบแรกให้เขียนโดยใช้ for loop ธรรมดา
แบบที่สองให้เขียนโดยใช้ list comprehension
names = ['aaron', 'leigH', 'เต้', 'jOHN']
# for loop ธรรมดา
"""
1. สร้างลิสต์ใหม่ (new_list) เพื่อเก็บชื่อที่ฟอร์แมตแล้ว
2. วนลูป (loop) ทุกตัวอักษรในรายชื่อ (names)
3. ฟอร์แมตชื่อภาษาอังกฤษ (eng_name)
3.1 ตรวจสอบว่า eng_name เป็นตัวอักษรเล็กทั้งหมดหรือไม่ (islower())
3.2 ถ้าเป็นตัวอักษรเล็กทั้งหมด ให้แปลงเป็นตัวพิมพ์ใหญ่ตัวแรก (capitalize())
4. เพิ่มชื่อที่ฟอร์แมตแล้ว (eng_name) ลงในรายการใหม่ (new_list)
"""
new_list = []
for name in names:
if name.lower().islower():
new_list.append(name.lower().capitalize())
print(new_list)
['Aaron', 'Leigh', 'John']
# List comprehension
new_list = [name.lower().capitalize() for name in names if name.lower().islower()]
print(new_list)
['Aaron', 'Leigh', 'John']
ข้อ 2: List comprehension 2#
Given a list of English words, use list comprehension to create a list of words that are all capitalized. You must also exclude words that are shorter than two characters.
tokens = ['Fruit', 'flies', 'do', 'like', 'bananas', '.']
new_tokens = [token.upper() for token in tokens if len(token) > 2]
print(new_tokens)
['FRUIT', 'FLIES', 'LIKE', 'BANANAS']
ข้อ 3: List comprehension 3#
เขียน List comprehension
input เป็นลิสต์ของคำ (strings) เช่น
['monKey', 'roach', 'Eve', 'oo', 'Jim']
output ลิสต์ของคำทั้งหมดแต่ว่าให้เอาสระออกให้หมด เช่น
['mnKy', 'rch', 'v', '', 'Jm']
word_list = ['monKey', 'roach', 'Eve', 'oo', 'Jim']
#for loop ธรรมดา
"""
1. วนลูปผ่านทุกตัวอักษรในรายการ inputList
2. กรองสระออกจากคำ
2.1 สร้างสตริงเปล่า
2.2 เพิ่มตัวอักษรแต่ละตัวในคำลงในสตริงเปล่า โดยไม่รวมสระ
2.3 เพิ่มสตริงที่ได้ไปยังรายการ new_list
"""
new_list = []
for word in word_list:
new_word = ''
for char in word:
if char.lower() not in 'aeiou':
new_word += char
new_list.append(new_word)
print(new_list)
['mnKy', 'rch', 'v', '', 'Jm']
#list comprehension
new_list = [''.join(char for char in word if char.lower() not in 'aeiou') for word in word_list]
print(new_list)
['mnKy', 'rch', 'v', '', 'Jm']
ข้อ 4: Dictionary comprehension 1#
Given a list words, create a dictionary whose keys are a word and values are the length of the word.
tokens = ['Fruit', 'flies', 'like', 'bananas', '.']
word_to_values = {token:len(token) for token in tokens}
print(word_to_values)
{'Fruit': 5, 'flies': 5, 'like': 4, 'bananas': 7, '.': 1}
ข้อ 5: Dictionary comprehension 2#
Given two lists of words that are translations of each other, create a dictionary whose key is an English and whose value is the French translation of that word. And keep only English words that are longer than 3 characters.
english_words = ['chair', 'pen', 'eraser', 'computer']
french_words = ['chaise', 'stylo', 'gomme', 'ordinateur']
english_to_french = {word: french_words[i] for i, word in enumerate(english_words) if len(word) > 3}
print(english_to_french)
{'chair': 'chaise', 'eraser': 'gomme', 'computer': 'ordinateur'}
ข้อ 6: Dictionary comprehension 3#
จงเขียน dictionary comprehension
Input: ลิสต์ของคำ
['baby', 'baby', 'baby', 'oh', '...', 'baby', 'baby', 'no','!']
Output: ดิกต์ที่มี key เป็นคำ และ value เป็นอันดับของคำตามความถี่ เช่น
{'baby': 1, 'oh': 2, '...': 3, 'no': 4, '!': 5}
Hint: ใช้ Counter
นับคำก่อนหลังจากนั้นเขียน dict comprehension โดยใช้ Counter.most_common
เป็น input
word_list = ['baby', 'baby', 'baby', 'oh', '...', 'baby', 'baby', 'no','!']
from collections import Counter
word_count = Counter(word_list)
word_count_lst = word_count.most_common()
word_to_rank = {word_n_freq[0]:i+1 for i, word_n_freq in enumerate(word_count_lst)}
print(word_to_rank)
{'baby': 1, 'oh': 2, '...': 3, 'no': 4, '!': 5}