Reputation: 79
I'm doing an exercise where certain classes based on their subject and number are classified as either upper or lower. I was able to get the correct classification of upper and lower level classes but my output seems to be a list of lists. Below is the expected output which is simply a list. My code is based on methods I have learned so far in my module.
Expected Output
['PSYCH 412', 'MATH 300', 'MATH 404', 'ENG 201', 'PSYCH 508', 'ENG 220']
Can someone help me figure out how to get my output to be a list instead of a list of lists? Thank you.
classes = ["MATH 150", "PSYCH 111", "PSYCH 313", "PSYCH 412", "MATH 300", "MATH 404", "MATH 206", "ENG 100", "ENG 103", "ENG 201", "PSYCH 508", "ENG 220", "ENG 125", "ENG 124"]
upper = [] #empty list
lower = [] #empty list
for w in classes:
sub = w.split()
if "MATH" in sub and int(sub[1]) >= 300:
upper.append(sub)
elif "ENG" in sub and int(sub[1]) >= 200:
upper.append(sub)
elif "PSYCH" in sub and int(sub[1]) >= 400:
upper.append(sub)
else:
lower.append(sub)
print("Upper Level Courses:", upper)
My Output
Upper Level Courses: [['PSYCH', '412'], ['MATH', '300'], ['MATH', '404'], ['ENG', '201'], ['PSYCH', '508'], ['ENG', '220']]
Upvotes: 2
Views: 238
Reputation: 2729
Because the sub
object is a list type, that's why in the results it's a list. You could concentrate the sub list as a string, or just use w
object and then append to the upper/lower list.
classes = ["MATH 150", "PSYCH 111", "PSYCH 313", "PSYCH 412", "MATH 300", "MATH 404", "MATH 206", "ENG 100", "ENG 103", "ENG 201", "PSYCH 508", "ENG 220", "ENG 125", "ENG 124"]
upper = [] #empty list
lower = [] #empty list
for w in classes:
sub = w.split()
if "MATH" in sub and int(sub[1]) >= 300:
upper.append(" ".join(sub))
elif "ENG" in sub and int(sub[1]) >= 200:
upper.append(" ".join(sub))
elif "PSYCH" in sub and int(sub[1]) >= 400:
upper.append(" ".join(sub))
else:
lower.append(" ".join(sub))
print("Upper Level Courses:", upper)
You could also use List Comprehensions
to rewrite your code like the following:
classes = ["MATH 150", "PSYCH 111", "PSYCH 313", "PSYCH 412", "MATH 300", "MATH 404", "MATH 206", "ENG 100", "ENG 103", "ENG 201", "PSYCH 508", "ENG 220", "ENG 125", "ENG 124"]
upper = [c for c in classes if ("MATH" in c and int(c.split()[1])>=300) or ("ENG" in c and int(c.split()[1])>=200) or ("PSYCH" in c and int(c.split()[1])>=400) ]
lower = [c for c in classes if c not in upper]
Hope it helps.
Upvotes: 0
Reputation: 195603
Your solution is close, just instead of sub
append w
to upper
or lower
:
classes = ["MATH 150", "PSYCH 111", "PSYCH 313", "PSYCH 412", "MATH 300", "MATH 404", "MATH 206", "ENG 100", "ENG 103", "ENG 201", "PSYCH 508", "ENG 220", "ENG 125", "ENG 124"]
upper = [] #empty list
lower = [] #empty list
for w in classes:
sub = w.split()
if "MATH" in sub and int(sub[1]) >= 300:
upper.append(w)
elif "ENG" in sub and int(sub[1]) >= 200:
upper.append(w)
elif "PSYCH" in sub and int(sub[1]) >= 400:
upper.append(w)
else:
lower.append(w)
print("Upper Level Courses:", upper)
Prints:
Upper Level Courses: ['PSYCH 412', 'MATH 300', 'MATH 404', 'ENG 201', 'PSYCH 508', 'ENG 220']
Upvotes: 3