How do I remove 'None' items from the end of a list in PythonHow do I check if a list is empty?Finding the index of an item given a list containing it in PythonHow to randomly select an item from a list?How to remove an element from a list by index?How to make a flat list out of list of listsHow do I get the number of elements in a list?How do I concatenate two lists in Python?How can I count the occurrences of a list item?How to clone or copy a list?How do I list all files of a directory?
How many wires can safely be secured in a Marrette 33 wire nut?
If you revoke a certificate authority's certificate, do all of the certificates it issued become invalid as well?
Could an American state survive nuclear war?
Code Golf Measurer © 2019
How does Sitecore know an event in the event queue table has been processed?
Does obfuscation give any measurable security benefit?
Car as a good investment
Digit Date Range
Did it take 3 minutes to reload a musket when the second amendment to the US constitution was ratified?
Why do military jets sometimes have elevators in a depressed position when parked?
How (and if) to include name change for transgender person in genealogy?
How can I communicate feelings to players without impacting their agency?
Why do these two ways of understanding constant acceleration give different results?
Why is my paper "under review" if it contains no results?
Why is technology bad for children?
100% positive Glassdoor employee reviews, 100% negative candidate reviews
If we should encrypt the message rather than the method of transfer, why do we care about wifi security? Is this just security theatre?
How does an alien race from a dying world annihilate most of humanity to colonize the planet for themselves?
Vergil Book XII, Line 756 | Meter Question
Should I avoid "big words" when writing to a younger audience?
What are the branches of statistics?
On notice period - coworker I need to train is giving me the silent treatment
How to extract *.tgz.part-*?
Can you use a virtual credit card to withdraw money from an ATM in the UK?
How do I remove 'None' items from the end of a list in Python
How do I check if a list is empty?Finding the index of an item given a list containing it in PythonHow to randomly select an item from a list?How to remove an element from a list by index?How to make a flat list out of list of listsHow do I get the number of elements in a list?How do I concatenate two lists in Python?How can I count the occurrences of a list item?How to clone or copy a list?How do I list all files of a directory?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;
A have a list that might contain items that are None. I would like to remove these items, but only if they appear at the end of the list, so:
[None, "Hello", None, "World", None, None]
# Would become:
[None, "Hello", None, "World"]
I have written a function, but I'm not sure this is the right way to go about it in python?:
def shrink(lst):
# Start from the end of the list.
i = len(lst) -1
while i >= 0:
if lst[i] is None:
# Remove the item if it is None.
lst.pop(i)
else:
# We want to preserve 'None' items in the middle of the list, so stop as soon as we hit something not None.
break
# Move through the list backwards.
i -= 1
Also a list comprehension as an alternative, but this seems inefficient and no more readable?:
myList = [x for index, x in enumerate(myList) if x is not None or myList[index +1:] != [None] * (len(myList[index +1:]))]
What it the pythonic way to remove items that are 'None' from the end of a list?
python list
add a comment
|
A have a list that might contain items that are None. I would like to remove these items, but only if they appear at the end of the list, so:
[None, "Hello", None, "World", None, None]
# Would become:
[None, "Hello", None, "World"]
I have written a function, but I'm not sure this is the right way to go about it in python?:
def shrink(lst):
# Start from the end of the list.
i = len(lst) -1
while i >= 0:
if lst[i] is None:
# Remove the item if it is None.
lst.pop(i)
else:
# We want to preserve 'None' items in the middle of the list, so stop as soon as we hit something not None.
break
# Move through the list backwards.
i -= 1
Also a list comprehension as an alternative, but this seems inefficient and no more readable?:
myList = [x for index, x in enumerate(myList) if x is not None or myList[index +1:] != [None] * (len(myList[index +1:]))]
What it the pythonic way to remove items that are 'None' from the end of a list?
python list
1
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago
add a comment
|
A have a list that might contain items that are None. I would like to remove these items, but only if they appear at the end of the list, so:
[None, "Hello", None, "World", None, None]
# Would become:
[None, "Hello", None, "World"]
I have written a function, but I'm not sure this is the right way to go about it in python?:
def shrink(lst):
# Start from the end of the list.
i = len(lst) -1
while i >= 0:
if lst[i] is None:
# Remove the item if it is None.
lst.pop(i)
else:
# We want to preserve 'None' items in the middle of the list, so stop as soon as we hit something not None.
break
# Move through the list backwards.
i -= 1
Also a list comprehension as an alternative, but this seems inefficient and no more readable?:
myList = [x for index, x in enumerate(myList) if x is not None or myList[index +1:] != [None] * (len(myList[index +1:]))]
What it the pythonic way to remove items that are 'None' from the end of a list?
python list
A have a list that might contain items that are None. I would like to remove these items, but only if they appear at the end of the list, so:
[None, "Hello", None, "World", None, None]
# Would become:
[None, "Hello", None, "World"]
I have written a function, but I'm not sure this is the right way to go about it in python?:
def shrink(lst):
# Start from the end of the list.
i = len(lst) -1
while i >= 0:
if lst[i] is None:
# Remove the item if it is None.
lst.pop(i)
else:
# We want to preserve 'None' items in the middle of the list, so stop as soon as we hit something not None.
break
# Move through the list backwards.
i -= 1
Also a list comprehension as an alternative, but this seems inefficient and no more readable?:
myList = [x for index, x in enumerate(myList) if x is not None or myList[index +1:] != [None] * (len(myList[index +1:]))]
What it the pythonic way to remove items that are 'None' from the end of a list?
python list
python list
asked 9 hours ago
leemanleeman
945 bronze badges
945 bronze badges
1
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago
add a comment
|
1
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago
1
1
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago
add a comment
|
3 Answers
3
active
oldest
votes
Discarding from the end of a list is efficient.
while lst[-1] is None:
del lst[-1]
Add a safeguard for IndexError: pop from empty list
if necessary (it depends on your specific application whether an empty list should be considered normal or an error condition):
while lst and lst[-1] is None:
del lst[-1]
add a comment
|
Easiest way would probably be what you did. Here's a conceptually simpler implementation of that:
def shrink(lst):
copy_lst = lst[:] # don't modify the original
while copy_lst[-1] is None: # you can get the last element in 1 step with index -1
copy_list.pop()
return copy_lst
As of python 3.8, and the walrus operator, it would be possible to do in a list comprehension, but this is a hacky solution and you shouldn't use it:
def shrink(lst):
at_end = True
return reversed([(at_end := e is None and at_end, e)[1] for e in reversed(lst) if not at_end])
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
add a comment
|
If you don't want to modify the list, you can just find the first index from the right that isn't None and slice to it:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
return l[:i + 1]
return l[:0]
If you do want to modify the list in-place, you can just delete the slice:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
break
else:
i = -1
del l[i + 1:]
Um, aren't spaces important in Python? I didn't know there was afor ... else
loop...
– Maarten Bodewes
18 mins ago
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f58309803%2fhow-do-i-remove-none-items-from-the-end-of-a-list-in-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Discarding from the end of a list is efficient.
while lst[-1] is None:
del lst[-1]
Add a safeguard for IndexError: pop from empty list
if necessary (it depends on your specific application whether an empty list should be considered normal or an error condition):
while lst and lst[-1] is None:
del lst[-1]
add a comment
|
Discarding from the end of a list is efficient.
while lst[-1] is None:
del lst[-1]
Add a safeguard for IndexError: pop from empty list
if necessary (it depends on your specific application whether an empty list should be considered normal or an error condition):
while lst and lst[-1] is None:
del lst[-1]
add a comment
|
Discarding from the end of a list is efficient.
while lst[-1] is None:
del lst[-1]
Add a safeguard for IndexError: pop from empty list
if necessary (it depends on your specific application whether an empty list should be considered normal or an error condition):
while lst and lst[-1] is None:
del lst[-1]
Discarding from the end of a list is efficient.
while lst[-1] is None:
del lst[-1]
Add a safeguard for IndexError: pop from empty list
if necessary (it depends on your specific application whether an empty list should be considered normal or an error condition):
while lst and lst[-1] is None:
del lst[-1]
edited 7 hours ago
answered 8 hours ago
wimwim
185k62 gold badges368 silver badges492 bronze badges
185k62 gold badges368 silver badges492 bronze badges
add a comment
|
add a comment
|
Easiest way would probably be what you did. Here's a conceptually simpler implementation of that:
def shrink(lst):
copy_lst = lst[:] # don't modify the original
while copy_lst[-1] is None: # you can get the last element in 1 step with index -1
copy_list.pop()
return copy_lst
As of python 3.8, and the walrus operator, it would be possible to do in a list comprehension, but this is a hacky solution and you shouldn't use it:
def shrink(lst):
at_end = True
return reversed([(at_end := e is None and at_end, e)[1] for e in reversed(lst) if not at_end])
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
add a comment
|
Easiest way would probably be what you did. Here's a conceptually simpler implementation of that:
def shrink(lst):
copy_lst = lst[:] # don't modify the original
while copy_lst[-1] is None: # you can get the last element in 1 step with index -1
copy_list.pop()
return copy_lst
As of python 3.8, and the walrus operator, it would be possible to do in a list comprehension, but this is a hacky solution and you shouldn't use it:
def shrink(lst):
at_end = True
return reversed([(at_end := e is None and at_end, e)[1] for e in reversed(lst) if not at_end])
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
add a comment
|
Easiest way would probably be what you did. Here's a conceptually simpler implementation of that:
def shrink(lst):
copy_lst = lst[:] # don't modify the original
while copy_lst[-1] is None: # you can get the last element in 1 step with index -1
copy_list.pop()
return copy_lst
As of python 3.8, and the walrus operator, it would be possible to do in a list comprehension, but this is a hacky solution and you shouldn't use it:
def shrink(lst):
at_end = True
return reversed([(at_end := e is None and at_end, e)[1] for e in reversed(lst) if not at_end])
Easiest way would probably be what you did. Here's a conceptually simpler implementation of that:
def shrink(lst):
copy_lst = lst[:] # don't modify the original
while copy_lst[-1] is None: # you can get the last element in 1 step with index -1
copy_list.pop()
return copy_lst
As of python 3.8, and the walrus operator, it would be possible to do in a list comprehension, but this is a hacky solution and you shouldn't use it:
def shrink(lst):
at_end = True
return reversed([(at_end := e is None and at_end, e)[1] for e in reversed(lst) if not at_end])
answered 8 hours ago
Green Cloak GuyGreen Cloak Guy
8,2531 gold badge11 silver badges27 bronze badges
8,2531 gold badge11 silver badges27 bronze badges
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
add a comment
|
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
2
2
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
Why include a "hacky solution that you shouldn't use" in your answer at all?
– wim
8 hours ago
add a comment
|
If you don't want to modify the list, you can just find the first index from the right that isn't None and slice to it:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
return l[:i + 1]
return l[:0]
If you do want to modify the list in-place, you can just delete the slice:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
break
else:
i = -1
del l[i + 1:]
Um, aren't spaces important in Python? I didn't know there was afor ... else
loop...
– Maarten Bodewes
18 mins ago
add a comment
|
If you don't want to modify the list, you can just find the first index from the right that isn't None and slice to it:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
return l[:i + 1]
return l[:0]
If you do want to modify the list in-place, you can just delete the slice:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
break
else:
i = -1
del l[i + 1:]
Um, aren't spaces important in Python? I didn't know there was afor ... else
loop...
– Maarten Bodewes
18 mins ago
add a comment
|
If you don't want to modify the list, you can just find the first index from the right that isn't None and slice to it:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
return l[:i + 1]
return l[:0]
If you do want to modify the list in-place, you can just delete the slice:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
break
else:
i = -1
del l[i + 1:]
If you don't want to modify the list, you can just find the first index from the right that isn't None and slice to it:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
return l[:i + 1]
return l[:0]
If you do want to modify the list in-place, you can just delete the slice:
def shrink(l):
for i in range(len(l) - 1, -1, -1):
if l[i] is not None:
break
else:
i = -1
del l[i + 1:]
answered 8 hours ago
ArtyerArtyer
8,4041 gold badge13 silver badges34 bronze badges
8,4041 gold badge13 silver badges34 bronze badges
Um, aren't spaces important in Python? I didn't know there was afor ... else
loop...
– Maarten Bodewes
18 mins ago
add a comment
|
Um, aren't spaces important in Python? I didn't know there was afor ... else
loop...
– Maarten Bodewes
18 mins ago
Um, aren't spaces important in Python? I didn't know there was a
for ... else
loop...– Maarten Bodewes
18 mins ago
Um, aren't spaces important in Python? I didn't know there was a
for ... else
loop...– Maarten Bodewes
18 mins ago
add a comment
|
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f58309803%2fhow-do-i-remove-none-items-from-the-end-of-a-list-in-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
@Tomalak what's the benefit of reversing the list?
– leeman
7 hours ago