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;









6

















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?










share|improve this question






















  • 1





    @Tomalak what's the benefit of reversing the list?

    – leeman
    7 hours ago

















6

















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?










share|improve this question






















  • 1





    @Tomalak what's the benefit of reversing the list?

    – leeman
    7 hours ago













6












6








6


1






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?










share|improve this question















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






share|improve this question














share|improve this question











share|improve this question




share|improve this question










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












  • 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












3 Answers
3






active

oldest

votes


















14


















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]





share|improve this answer



































    1


















    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])





    share|improve this answer





















    • 2





      Why include a "hacky solution that you shouldn't use" in your answer at all?

      – wim
      8 hours ago



















    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:]





    share|improve this answer


























    • Um, aren't spaces important in Python? I didn't know there was a for ... else loop...

      – Maarten Bodewes
      18 mins ago












    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
    );



    );














    draft saved

    draft discarded
















    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









    14


















    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]





    share|improve this answer
































      14


















      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]





      share|improve this answer






























        14














        14










        14









        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]





        share|improve this answer
















        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]






        share|improve this answer















        share|improve this answer




        share|improve this answer








        edited 7 hours ago

























        answered 8 hours ago









        wimwim

        185k62 gold badges368 silver badges492 bronze badges




        185k62 gold badges368 silver badges492 bronze badges


























            1


















            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])





            share|improve this answer





















            • 2





              Why include a "hacky solution that you shouldn't use" in your answer at all?

              – wim
              8 hours ago
















            1


















            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])





            share|improve this answer





















            • 2





              Why include a "hacky solution that you shouldn't use" in your answer at all?

              – wim
              8 hours ago














            1














            1










            1









            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])





            share|improve this answer














            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])






            share|improve this answer













            share|improve this answer




            share|improve this answer










            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













            • 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












            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:]





            share|improve this answer


























            • Um, aren't spaces important in Python? I didn't know there was a for ... else loop...

              – Maarten Bodewes
              18 mins ago















            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:]





            share|improve this answer


























            • Um, aren't spaces important in Python? I didn't know there was a for ... else loop...

              – Maarten Bodewes
              18 mins ago













            1














            1










            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:]





            share|improve this answer














            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:]






            share|improve this answer













            share|improve this answer




            share|improve this answer










            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 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
















            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


















            draft saved

            draft discarded















































            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.




            draft saved


            draft discarded














            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





















































            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









            Popular posts from this blog

            Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

            Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

            Ласкавець круглолистий Зміст Опис | Поширення | Галерея | Примітки | Посилання | Навігаційне меню58171138361-22960890446Bupleurum rotundifoliumEuro+Med PlantbasePlants of the World Online — Kew ScienceGermplasm Resources Information Network (GRIN)Ласкавецькн. VI : Літери Ком — Левиправивши або дописавши її