Understanding list comprehension - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Understanding list comprehension (/thread-22504.html) |
Understanding list comprehension - Drone4four - Nov-15-2019 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. RE: Understanding list comprehension - buran - Nov-15-2019 on line 4 you assign each char to variable new_name , one at a time. Instead you should use list.append() methodline 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) RE: Understanding list comprehension - buran - Nov-15-2019 (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 RE: Understanding list comprehension - ichabod801 - Nov-15-2019 You want the append on line 4, not line 5: new_name.append(char.upper()) . Then delete line 5, you don't need it.
RE: Understanding list comprehension - Drone4four - Nov-15-2019 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? RE: Understanding list comprehension - ichabod801 - Nov-15-2019 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. |