Python Forum
Understanding list comprehension
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Understanding list comprehension
#1
I’m taking Colt Steele’s Udemy course called “The Modern Python 3 Bootcamp”. I’m on Section 13 on List Comprehension.

The instructor uses this as an example:

name = 'Nebuchadnezzar'
print([char.upper() for char in name])
Here is the output:
['N', 'E', 'B', 'U', 'C', 'H', 'A', 'D', 'N', 'E', 'Z', 'Z', 'A', 'R']

In my pseudo code that I came up with, these two lines could be read as: "Give me the uppercase format of every character for every character inside the name variable (which is a string) containing: 'Nebuchadnezzar'."

Is that pseudo code correct?

I am now taking the above list comprehension explanation a step further by trying to do something the course instructor did not do, which is re-write the simple algorithm as a regular for loop. Here is my valiant attempt:

name = 'Nebuchadnezzar'
new_name = []
for char in name:
    new_name = char.upper()
    char + char  
print(new_name)

The output is just R. I was expecting: ['N', 'E', 'B', 'U', 'C', 'H', 'A', 'D', 'N', 'E', 'Z', 'Z', 'A', 'R']

I’m not sure why or what I am doing wrong. I tried adding the append method to line 5 but that threw a syntax error. Would someone here be able to rewrite the original list comprehension as a regular for loop?

Here are some of the resources I have already consulted:
By the way, more of my list-comprehension practice that I have done today can be found here in a Jupyter Notebook in my GitHub repo.
Reply
#2
on line 4 you assign each char to variable new_name, one at a time. Instead you should use list.append() method
line 5 is redundant, no visual effect whatsoever - you just concatenate char twice and it's immediately lost as you don't do anything (e.g. assign it to a variable)
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
(Nov-15-2019, 02:43 PM)Drone4four Wrote: Is that pseudo code correct?
yes, that is correct description of what's going on in the list comprehension.
print the list constructed from upper_case char for each char in name
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
You want the append on line 4, not line 5: new_name.append(char.upper()). Then delete line 5, you don't need it.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
Thank you @ichabod801 and @buran. This helps. I've got my for loop behaving as I expect now.

Here is something new that I have learned from this thread:

When you are using a for loop whose purpose is to create a list, then list comprehension can be used and should be used because it is more concise and simpler and so it is more pythonic. Generally speaking, when you are creating a list with a loop, you need to invoke the append method. However when using a list comprehension technique in one line, there is no need to explicitly use list_variable.append() because .append() is always implied. .append needs to be invoked only when using a for loop expressed in full on multiple lines.

Is that correct? Is there anything you people might want to add?
Reply
#6
I would say that is not necessarily correct. People fall in love with list comprehensions, but they can get overly complicated. If I can't fit a list comprehension onto one line (without abbreviating all of my variable names to single letters), I make a for loop. That depends on how you define "one line," but I think it's a good rule of thumb.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  List Comprehension Issue johnywhy 5 438 Jan-14-2024, 07:58 AM
Last Post: Pedroski55
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 426 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  Using list comprehension with 'yield' in function tester_V 5 1,175 Apr-02-2023, 06:31 PM
Last Post: tester_V
  list comprehension 3lnyn0 4 1,359 Jul-12-2022, 09:49 AM
Last Post: DeaD_EyE
  List comprehension used differently coder_sw99 3 1,679 Oct-03-2021, 04:12 PM
Last Post: coder_sw99
  How to invoke a function with return statement in list comprehension? maiya 4 2,746 Jul-17-2021, 04:30 PM
Last Post: maiya
  List comprehension and Lambda cametan 2 2,196 Jun-08-2021, 08:29 AM
Last Post: cametan
  What is the difference between a generator and a list comprehension? Pedroski55 2 2,176 Jan-02-2021, 04:24 AM
Last Post: Pedroski55
  For Loop with List Comprehension muzikman 25 6,406 Dec-18-2020, 10:45 PM
Last Post: muzikman
  Using recursion instead of for loops / list comprehension Drone4four 4 3,072 Oct-10-2020, 05:53 AM
Last Post: ndc85430

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020