Lab 6: Part 1 - For Loops & Lists
Preface: Sample lists
In this first part of today's lab, we'll be writing functions that work with a list of words.
To help with testing your functions, we've included the following files which contain long lists of words:
File name | Variable(s) created |
---|---|
sampleLists.py |
greetings , colors , fruit , etc. |
wordLists.py |
tinyWordList , smallWordList |
songLyrics.py |
beautifulLyricList , beforeHeCheatsLyricList , etc. |
vocabulary.py |
englishwords |
Note: DO NOT attempt to open vocabulary.py
in Thonny (although you're free
to open the other files and look at what's in them). vocabulary.py
contains
so many words on a single line of code that Thonny on some computers will slow
down and hang if you try to open it. You may have to force-quite and restart
Thonny if this happens.
Here is a sample of what the contents of songLyrics.py
looks like:
# CS111 Lab 6
# Sample lists for testing, composed of song lyrics
beautifulLyricList = ["You're", 'insecure', "Don't", 'know', 'what', 'for', ...
beforeHeCheatsLyricList = ['Right', 'now', "he's", 'probably', 'slow', ...
iGetByWithALittleHelpLyricList = ['What', 'would', 'you', 'think', 'if', ...
...
To access these lists in your code, add the name of the relevant file at the top of your code, e.g.:
# Import songLyrics for access to beautifulLyricList, beforeHeCheatsLyricList, etc.
from songLyrics import *
Note: to use the debugger, you may have to comment out the import for
vocabulary.py
, because otherwise the debugger will get stuck at this import.
Preface: Useful Python reminders
Length
len()
returns the number of items in a list (or a string), e.g.:
len(["happy","birthday"]) # Results: 2
len("mississippi") # Results: 11
Add to a list
The append method can be used to add new items to the end of a list, e.g.
myFriends = [] # Start with an empty list
myFriends.append('taylor') # Add taylor
myFriends # Results: ['taylor']
myFriends.append('ed') # Next add ed
myFriends # Results: ['taylor','ed']
pets = ['charlotte','wilbur'] # Start a new list
pets.append('templeton') # Add templeton
print (pets) # Results: ['charlotte','wilbur','templeton']
Your task: List Manipulations
Create a new file called listPractice1.py
and write functions to answer the following questions.
1. wordsStartWithA
How many words in a given word list begin with the lowercase letter a
?
Define a function named wordsStartWithA
which will return the number of words
from a list of words that start with 'a'. The function should have a single
parameter, which is the list of words to look at.
Hint: Use a variable to keep track of how many words start with a
,
looking at each word one at a time as you loop through the list of
words. Below is a sample iteration table to help you see how the
function should work with the list
wordsStartWithA(['apple', 'orange', 'apricot','Avocado', 'pear'])
Iteration table
word | count |
---|---|
N/A | 0 |
'apple' | 1 |
'orange' | 1 |
'apricot' | 2 |
'Avocado' | 2 |
'pear' | 2 |
Examples:
from songLyrics import *
from wordLists import *
from vocabulary import *
# For any of the list functions you write today, you may want to start off
# with a very small, hard-coded list where you can easily identify
# the expected outcome, e.g.:
print (wordsStartWithA(['apple', 'orange', 'apricot', 'Avocado', 'pear']))
# Expected outcome: 2
# Then, you can test on the bigger lists described on the top of this page:
print (wordsStartWithA(smallWordList)) # 65
print (wordsStartWithA(loveStoryLyricList)) # 27
print (wordsStartWithA(englishwords)) # 3685
print (wordsStartWithA(beautifulLyricList)) # 17
print (wordsStartWithA(imSoFancyLyricList)) # 17
2. averageLength
What is the average word length of a given list of words? Here's an example:
miniList = ['apple','pie']
The total length of the words in miniList
is 5 + 3 = 8.
8/2 = 4.0, so the average length of works in miniList
is 4.0.
Round your results to 2 digits after the decimal point.
Examples:
print (averageLength(imSoFancyLyricList)) # 4.06
print (averageLength(beautifulLyricList)) # 4.03
print (averageLength(beforeHeCheatsLyricList)) # 4.27
print (averageLength(loveStoryLyricList)) # 3.87
print (averageLength(thriftShopLyricList)) # 4.44
print (averageLength(iGetByWithALittleHelpLyricList)) # 3.66
print (averageLength(tinyWordList)) # 5.7
print (averageLength(smallWordList)) # 6.08
print (averageLength(englishwords)) # 8.37
3. countYou
Which song uses the word "you" the most?
Hint: Make sure you count "You"
and "YOU"
and not just "you"
.
Examples:
print (countYou(["you", "probably", "think", "this", "song", "is", "about", "you"])) # 2
print (countYou(imSoFancyLyricList)) # 17
print (countYou(beautifulLyricList)) # 43
print (countYou(beforeHeCheatsLyricList)) # 1
print (countYou(loveStoryLyricList)) # 16
print (countYou(thriftShopLyricList)) # 5
print (countYou(iGetByWithALittleHelpLyricList)) # 10
4. wordsWithLess
Which words in a given word list contain the word less
?
Hint: append
is useful here to build a list of words that contain less
in them. Start with an empty list and append each word that meets the criteria. Then return the list.
Task 4a: Fill in this iteration table before writing your function (the first row has been done for you).
>>> wordsWithLess(['careless','apple','lessen','pear','mindless'])
['careless', 'lessen', 'mindless']
word | newlist |
---|---|
N/A | [ ] |
careless | |
apple | |
lessen | |
pear | |
mindless |
After you and your partner fill in the table, click here.
Task 4b: Define the function wordsWithless
(see examples below).
Examples:
print (wordsWithLess(['careless', 'careful']))
# Results: ['careless']
print (wordsWithLess(smallWordList))
# Results: ['painless']
print (wordsWithLess(englishwords))
# Results: a list with 401 words
# ['ageless', 'agelessness', 'aimless', ..., 'worthlessness']
print (wordsWithLess(beforeHeCheatsLyricList))
# Results: []
5. longestWords
This function returns a list with the longest word(s) in a song or word list (without repeating words).
Examples:
print (longestWords(["apple", "apricot", "pear", "coconut", "orange"]))
# Results: ['apricot', 'coconut']
print (longestWords(imSoFancyLyricList))
# Results: ['department', 'Chandelier', 'expensive,']
print (longestWords(beautifulLyricList))
# Results: ['overwhelmed', 'desperately']
print (longestWords(beforeHeCheatsLyricList))
# Results: ['bleached-blond']
print (longestWords(loveStoryLyricList))
# Results: ['http://www.elyrics.net']
print (longestWords(thriftShopLyricList))
# Results: ['hand-me-downs?']
print (longestWords(iGetByWithALittleHelpLyricList))
# Results: ['Ah-ah-ah-ah-ah-ah-ah-ah-ah']
print (longestWords(englishwords))
# Results: ['electroencephalographs']
6. [Challenge problem] wordsContainAllChars
Which words in the wordlist contain all the characters in a given string (e.g. love
)?
Assume none of the given strings have duplicate letters (i.e. you won't see a search term like dud
).
Task 6a: Fill in this iteration table before writing your function (the first row has been done for you).
>>> wordsContainAllChars(["ab", "abc", "cba", "abracadabra", "xyz"], "abc")
['abc', 'cba', 'abracadabra']
word | keeper |
---|---|
N/A | [ ] |
ab | |
abc | |
cba | |
abracadabra | |
xyz |
After you and your partner fill in the table, click here.
Task 6b: Define the function wordsContainAllChars
(see examples below).
Hint: First, figure out how to tell if one word contains all the letters of another string. Can you
and your partner define a predicate to do so?
Examples:
print (wordsContainAllChars(["ab", "abc", "cba", "abracadabra", "xyz"], "abc"))
# Results: ['abc', 'cba', 'abracadabra']
print(wordsContainAllChars(smallWordList, "pam"))
# Results: ['amorphous', 'atmosphere', 'campanile', 'imperial', 'pam',
# 'pamela', 'polynomial', 'program', 'scamper', 'temptation']
print(wordsContainAllChars(loveStoryLyricList, "love"))
# Results: ['love', 'love', 'love', 'love', 'love', 'love']
print(wordsContainAllChars(thriftShopLyricList, "ough"))
# Results: ['bought', 'bought', 'bought', 'through', 'dough', 'through']
print(wordsContainAllChars(englishwords,"evrngast"))
# Results: ['advertising', 'asseverating', ..., 'vegetarianism', 'vegetarians']
More list manipulations (time permitting)
Create a new file called listPractice2.py
in your lab06
folder.
Note that the lab download folder included a file called sampleLists.py
which contains sample lists you can use for testing. Study this file to see what lists are available, and then add from sampleLists import *
to the top of your listPractice2.py
file so they're available for use in your file.
Using these sample lists, create the following functions.
1. filterDrop
Write a function called filterDrop(value, mylist)
that takes a value and a list and returns a new list with all the occurrences of the given value dropped.
Examples:
print (filterDrop('James', skyfall))
# Results: ['M', 'Q', 'Moneypenny', 'JamesBond', 'Bond', 'Silva', 'Patrice']
print (filterDrop('Q', skyfall))
# Results: ['M', 'Moneypenny', 'James', 'JamesBond', 'Bond', 'Silva', 'Patrice']
2. filterLength
Write a function called filterLength
that when given a maxLength and a list of pairs, returns a list of only the pairs that, when summed together, are shorter than the maxLength.
Examples:
print (filterLength(10, roster))
# Results: [['Yoyo','Ma'],['Sohie','Lee'],['Jean','Herbst'],['Santa','Claus']]
print (filterLength(12, roster))
# Results: [['Yoyo','Ma'],['Sohie','Lee'],['Jean','Herbst'],['Brian','Tjaden'],['Santa','Claus'],['Happy','Camper'],['Harry','Styles'],['Taylor','Swift']]
3. mapPluralize
Write a function called mapPluralize(mylist)
that takes a list of words and returns a new list with the plurals of each of the words.
The nouns are pluralized by adding the suffix s
, e.g. the plural of bagel
is bagels
. You do not have to handle special cases like kiss
-> kisses
.
Examples:
print (mapPluralize(['assignment']))
# Results: ['assignments']
print (mapPluralize(['donut', 'muffin', 'bagel']))
# Results: ['donuts', 'muffins', 'bagels']
print (mapPluralize(['tree' ,'witch' , 'kiss', 'moose', 'alpaca']))
# Results: ['trees', 'witchs', 'kisss', 'mooses', 'alpacas']