EverythingZen
EverythingZen

Reputation: 79

How to print a list instead of a list of lists

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

Answers (2)

Eric
Eric

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

Andrej Kesely
Andrej Kesely

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

Related Questions