Dropping lists using pattern [duplicate]











up vote
3
down vote

favorite













This question already has an answer here:




  • Matching a case when one element in a pair is Null

    2 answers




I have the following list of lists.



 data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}


I want to drop all the lists with 0 as the 3rd entry i.e. {m,n,0}. How can I do this?










share|improve this question













marked as duplicate by Jason B., Henrik Schumacher, Kuba list-manipulation
Users with the  list-manipulation badge can single-handedly close list-manipulation questions as duplicates and reopen them as needed.

StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Dec 3 at 21:46


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.



















    up vote
    3
    down vote

    favorite













    This question already has an answer here:




    • Matching a case when one element in a pair is Null

      2 answers




    I have the following list of lists.



     data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}


    I want to drop all the lists with 0 as the 3rd entry i.e. {m,n,0}. How can I do this?










    share|improve this question













    marked as duplicate by Jason B., Henrik Schumacher, Kuba list-manipulation
    Users with the  list-manipulation badge can single-handedly close list-manipulation questions as duplicates and reopen them as needed.

    StackExchange.ready(function() {
    if (StackExchange.options.isMobile) return;

    $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
    var $hover = $(this).addClass('hover-bound'),
    $msg = $hover.siblings('.dupe-hammer-message');

    $hover.hover(
    function() {
    $hover.showInfoMessage('', {
    messageElement: $msg.clone().show(),
    transient: false,
    position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
    dismissable: false,
    relativeToBody: true
    });
    },
    function() {
    StackExchange.helpers.removeMessages();
    }
    );
    });
    });
    Dec 3 at 21:46


    This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

















      up vote
      3
      down vote

      favorite









      up vote
      3
      down vote

      favorite












      This question already has an answer here:




      • Matching a case when one element in a pair is Null

        2 answers




      I have the following list of lists.



       data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}


      I want to drop all the lists with 0 as the 3rd entry i.e. {m,n,0}. How can I do this?










      share|improve this question














      This question already has an answer here:




      • Matching a case when one element in a pair is Null

        2 answers




      I have the following list of lists.



       data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}


      I want to drop all the lists with 0 as the 3rd entry i.e. {m,n,0}. How can I do this?





      This question already has an answer here:




      • Matching a case when one element in a pair is Null

        2 answers








      list-manipulation pattern-matching






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 3 at 16:53









      Physics Moron

      253111




      253111




      marked as duplicate by Jason B., Henrik Schumacher, Kuba list-manipulation
      Users with the  list-manipulation badge can single-handedly close list-manipulation questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Dec 3 at 21:46


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.






      marked as duplicate by Jason B., Henrik Schumacher, Kuba list-manipulation
      Users with the  list-manipulation badge can single-handedly close list-manipulation questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Dec 3 at 21:46


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          4
          down vote



          accepted










          Easy (but probably not the fastest) way:



          DeleteCases[data, {_, _, 0}]



          {{2, 0, 1}, {5, 0, 3}}




          This might be a bit faster for longer lists as it entirely avoids pattern matching:



          Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]


          Here a speed test:



          data = RandomInteger[{0, 5}, {1000000, 3}];
          a = DeleteCases[data, {_, _, 0}]; // AbsoluteTiming // First
          b = Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]; //
          AbsoluteTiming // First
          a == b



          0.407339



          0.027375



          True







          share|improve this answer






























            up vote
            1
            down vote













            Another way



            data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}
            Pick[data, Unitize@data[[;; , 3]], 1]



            {{2, 0, 1}, {5, 0, 3}}




            And a timing comparison to DeleteCases



            SeedRandom[1234]
            Block[
            {data = RandomInteger[{0, 5}, {1000000, 3}], times, m1, m2},
            times = {
            AbsoluteTiming[m1 = DeleteCases[data, {__, 0}]][[1]],
            AbsoluteTiming[m2 = Pick[#, Unitize@#[[;; , 3]], 1] &@data][[1]]
            };
            {times, m1 == m2}
            ]



            {{0.403632, 0.031339}, True}







            share|improve this answer




























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes








              up vote
              4
              down vote



              accepted










              Easy (but probably not the fastest) way:



              DeleteCases[data, {_, _, 0}]



              {{2, 0, 1}, {5, 0, 3}}




              This might be a bit faster for longer lists as it entirely avoids pattern matching:



              Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]


              Here a speed test:



              data = RandomInteger[{0, 5}, {1000000, 3}];
              a = DeleteCases[data, {_, _, 0}]; // AbsoluteTiming // First
              b = Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]; //
              AbsoluteTiming // First
              a == b



              0.407339



              0.027375



              True







              share|improve this answer



























                up vote
                4
                down vote



                accepted










                Easy (but probably not the fastest) way:



                DeleteCases[data, {_, _, 0}]



                {{2, 0, 1}, {5, 0, 3}}




                This might be a bit faster for longer lists as it entirely avoids pattern matching:



                Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]


                Here a speed test:



                data = RandomInteger[{0, 5}, {1000000, 3}];
                a = DeleteCases[data, {_, _, 0}]; // AbsoluteTiming // First
                b = Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]; //
                AbsoluteTiming // First
                a == b



                0.407339



                0.027375



                True







                share|improve this answer

























                  up vote
                  4
                  down vote



                  accepted







                  up vote
                  4
                  down vote



                  accepted






                  Easy (but probably not the fastest) way:



                  DeleteCases[data, {_, _, 0}]



                  {{2, 0, 1}, {5, 0, 3}}




                  This might be a bit faster for longer lists as it entirely avoids pattern matching:



                  Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]


                  Here a speed test:



                  data = RandomInteger[{0, 5}, {1000000, 3}];
                  a = DeleteCases[data, {_, _, 0}]; // AbsoluteTiming // First
                  b = Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]; //
                  AbsoluteTiming // First
                  a == b



                  0.407339



                  0.027375



                  True







                  share|improve this answer














                  Easy (but probably not the fastest) way:



                  DeleteCases[data, {_, _, 0}]



                  {{2, 0, 1}, {5, 0, 3}}




                  This might be a bit faster for longer lists as it entirely avoids pattern matching:



                  Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]


                  Here a speed test:



                  data = RandomInteger[{0, 5}, {1000000, 3}];
                  a = DeleteCases[data, {_, _, 0}]; // AbsoluteTiming // First
                  b = Delete[data, Partition[Random`Private`PositionsOf[data[[All, 3]], 0], 1]]; //
                  AbsoluteTiming // First
                  a == b



                  0.407339



                  0.027375



                  True








                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Dec 3 at 18:30

























                  answered Dec 3 at 16:58









                  Henrik Schumacher

                  46.8k466134




                  46.8k466134






















                      up vote
                      1
                      down vote













                      Another way



                      data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}
                      Pick[data, Unitize@data[[;; , 3]], 1]



                      {{2, 0, 1}, {5, 0, 3}}




                      And a timing comparison to DeleteCases



                      SeedRandom[1234]
                      Block[
                      {data = RandomInteger[{0, 5}, {1000000, 3}], times, m1, m2},
                      times = {
                      AbsoluteTiming[m1 = DeleteCases[data, {__, 0}]][[1]],
                      AbsoluteTiming[m2 = Pick[#, Unitize@#[[;; , 3]], 1] &@data][[1]]
                      };
                      {times, m1 == m2}
                      ]



                      {{0.403632, 0.031339}, True}







                      share|improve this answer

























                        up vote
                        1
                        down vote













                        Another way



                        data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}
                        Pick[data, Unitize@data[[;; , 3]], 1]



                        {{2, 0, 1}, {5, 0, 3}}




                        And a timing comparison to DeleteCases



                        SeedRandom[1234]
                        Block[
                        {data = RandomInteger[{0, 5}, {1000000, 3}], times, m1, m2},
                        times = {
                        AbsoluteTiming[m1 = DeleteCases[data, {__, 0}]][[1]],
                        AbsoluteTiming[m2 = Pick[#, Unitize@#[[;; , 3]], 1] &@data][[1]]
                        };
                        {times, m1 == m2}
                        ]



                        {{0.403632, 0.031339}, True}







                        share|improve this answer























                          up vote
                          1
                          down vote










                          up vote
                          1
                          down vote









                          Another way



                          data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}
                          Pick[data, Unitize@data[[;; , 3]], 1]



                          {{2, 0, 1}, {5, 0, 3}}




                          And a timing comparison to DeleteCases



                          SeedRandom[1234]
                          Block[
                          {data = RandomInteger[{0, 5}, {1000000, 3}], times, m1, m2},
                          times = {
                          AbsoluteTiming[m1 = DeleteCases[data, {__, 0}]][[1]],
                          AbsoluteTiming[m2 = Pick[#, Unitize@#[[;; , 3]], 1] &@data][[1]]
                          };
                          {times, m1 == m2}
                          ]



                          {{0.403632, 0.031339}, True}







                          share|improve this answer












                          Another way



                          data = {{0, 0, 0}, {1, 0, 0}, {2, 0, 1}, {3, 0, 0}, {4, 0, 0}, {5, 0, 3}}
                          Pick[data, Unitize@data[[;; , 3]], 1]



                          {{2, 0, 1}, {5, 0, 3}}




                          And a timing comparison to DeleteCases



                          SeedRandom[1234]
                          Block[
                          {data = RandomInteger[{0, 5}, {1000000, 3}], times, m1, m2},
                          times = {
                          AbsoluteTiming[m1 = DeleteCases[data, {__, 0}]][[1]],
                          AbsoluteTiming[m2 = Pick[#, Unitize@#[[;; , 3]], 1] &@data][[1]]
                          };
                          {times, m1 == m2}
                          ]



                          {{0.403632, 0.031339}, True}








                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Dec 3 at 18:41









                          That Gravity Guy

                          2,1011515




                          2,1011515















                              Popular posts from this blog

                              How to change which sound is reproduced for terminal bell?

                              Can I use Tabulator js library in my java Spring + Thymeleaf project?

                              Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents