How do I slice a string by characters in Python? [duplicate]












8
















This question already has an answer here:




  • Python - Find sequence of same characters

    3 answers



  • Splitting a string with repeated characters into a list using regex

    3 answers




There is a string with one or more characters. I want to slice the list so that the adjoining same characters are in the same element. For example:



'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']


How do I make this in Python?










share|improve this question















marked as duplicate by Kasrâmvd python
Users with the  python badge can single-handedly close python 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();
}
);
});
});
8 hours ago


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.














  • 1





    FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

    – Aran-Fey
    15 hours ago
















8
















This question already has an answer here:




  • Python - Find sequence of same characters

    3 answers



  • Splitting a string with repeated characters into a list using regex

    3 answers




There is a string with one or more characters. I want to slice the list so that the adjoining same characters are in the same element. For example:



'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']


How do I make this in Python?










share|improve this question















marked as duplicate by Kasrâmvd python
Users with the  python badge can single-handedly close python 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();
}
);
});
});
8 hours ago


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.














  • 1





    FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

    – Aran-Fey
    15 hours ago














8












8








8


2







This question already has an answer here:




  • Python - Find sequence of same characters

    3 answers



  • Splitting a string with repeated characters into a list using regex

    3 answers




There is a string with one or more characters. I want to slice the list so that the adjoining same characters are in the same element. For example:



'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']


How do I make this in Python?










share|improve this question

















This question already has an answer here:




  • Python - Find sequence of same characters

    3 answers



  • Splitting a string with repeated characters into a list using regex

    3 answers




There is a string with one or more characters. I want to slice the list so that the adjoining same characters are in the same element. For example:



'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']


How do I make this in Python?





This question already has an answer here:




  • Python - Find sequence of same characters

    3 answers



  • Splitting a string with repeated characters into a list using regex

    3 answers








python






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 10 hours ago









Peter Mortensen

13.8k1986113




13.8k1986113










asked 15 hours ago









Hank ChowHank Chow

521




521




marked as duplicate by Kasrâmvd python
Users with the  python badge can single-handedly close python 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();
}
);
});
});
8 hours ago


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 Kasrâmvd python
Users with the  python badge can single-handedly close python 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();
}
);
});
});
8 hours ago


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.










  • 1





    FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

    – Aran-Fey
    15 hours ago














  • 1





    FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

    – Aran-Fey
    15 hours ago








1




1





FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

– Aran-Fey
15 hours ago





FYI, if you google "python group identical elements" or something similar you'll find plenty of recipes that would help you get started.

– Aran-Fey
15 hours ago












5 Answers
5






active

oldest

votes


















15














Use itertools.groupby:



from itertools import groupby

s = 'abccbba'

print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']





share|improve this answer

































    4














    Can be achieved with re.finditer()



    import re
    s='aabccdd'
    print([m.group(0) for m in re.finditer(r"(w)1*", s)])
    #['aa', 'b', 'cc', 'dd']





    share|improve this answer































      2














      Without any modules and using for loop also it can be done in interesting way:



      l=
      str="aabccc"
      s=str[0]
      for c in str[1:]:

      if(c!=s[-1]):
      l.append(s)
      s=c
      else:
      s=s+c
      l.append(s)
      print(l)





      share|improve this answer








      New contributor




      Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




























        2














        Just one more alternative solution. You need no import for it in python2. In python3 you need import from functools.



        from functools import reduce   # in python3
        s='aaabccdddddaa'
        reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, )





        share|improve this answer



















        • 5





          Wow...this is as unreadable as it could get...

          – heemayl
          12 hours ago



















        1














        t=input()
        c=[t[0]]
        for i in range(1,len(t)):
        if t[i]==c[-1][0]:
        c[-1]=c[-1]+t[i]
        else:
        c.append(t[i])
        print(c)





        share|improve this answer








        New contributor




        Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.





















        • Please add some text to make the answer more descriptive.

          – v.coder
          7 hours ago


















        5 Answers
        5






        active

        oldest

        votes








        5 Answers
        5






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        15














        Use itertools.groupby:



        from itertools import groupby

        s = 'abccbba'

        print([''.join(v) for _, v in groupby(s)])
        # ['a', 'b', 'cc', 'bb', 'a']





        share|improve this answer






























          15














          Use itertools.groupby:



          from itertools import groupby

          s = 'abccbba'

          print([''.join(v) for _, v in groupby(s)])
          # ['a', 'b', 'cc', 'bb', 'a']





          share|improve this answer




























            15












            15








            15







            Use itertools.groupby:



            from itertools import groupby

            s = 'abccbba'

            print([''.join(v) for _, v in groupby(s)])
            # ['a', 'b', 'cc', 'bb', 'a']





            share|improve this answer















            Use itertools.groupby:



            from itertools import groupby

            s = 'abccbba'

            print([''.join(v) for _, v in groupby(s)])
            # ['a', 'b', 'cc', 'bb', 'a']






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 15 hours ago









            Aran-Fey

            20.9k53671




            20.9k53671










            answered 15 hours ago









            AustinAustin

            12.3k3930




            12.3k3930

























                4














                Can be achieved with re.finditer()



                import re
                s='aabccdd'
                print([m.group(0) for m in re.finditer(r"(w)1*", s)])
                #['aa', 'b', 'cc', 'dd']





                share|improve this answer




























                  4














                  Can be achieved with re.finditer()



                  import re
                  s='aabccdd'
                  print([m.group(0) for m in re.finditer(r"(w)1*", s)])
                  #['aa', 'b', 'cc', 'dd']





                  share|improve this answer


























                    4












                    4








                    4







                    Can be achieved with re.finditer()



                    import re
                    s='aabccdd'
                    print([m.group(0) for m in re.finditer(r"(w)1*", s)])
                    #['aa', 'b', 'cc', 'dd']





                    share|improve this answer













                    Can be achieved with re.finditer()



                    import re
                    s='aabccdd'
                    print([m.group(0) for m in re.finditer(r"(w)1*", s)])
                    #['aa', 'b', 'cc', 'dd']






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 15 hours ago









                    denis_lordenis_lor

                    1,37111130




                    1,37111130























                        2














                        Without any modules and using for loop also it can be done in interesting way:



                        l=
                        str="aabccc"
                        s=str[0]
                        for c in str[1:]:

                        if(c!=s[-1]):
                        l.append(s)
                        s=c
                        else:
                        s=s+c
                        l.append(s)
                        print(l)





                        share|improve this answer








                        New contributor




                        Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.

























                          2














                          Without any modules and using for loop also it can be done in interesting way:



                          l=
                          str="aabccc"
                          s=str[0]
                          for c in str[1:]:

                          if(c!=s[-1]):
                          l.append(s)
                          s=c
                          else:
                          s=s+c
                          l.append(s)
                          print(l)





                          share|improve this answer








                          New contributor




                          Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.























                            2












                            2








                            2







                            Without any modules and using for loop also it can be done in interesting way:



                            l=
                            str="aabccc"
                            s=str[0]
                            for c in str[1:]:

                            if(c!=s[-1]):
                            l.append(s)
                            s=c
                            else:
                            s=s+c
                            l.append(s)
                            print(l)





                            share|improve this answer








                            New contributor




                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.










                            Without any modules and using for loop also it can be done in interesting way:



                            l=
                            str="aabccc"
                            s=str[0]
                            for c in str[1:]:

                            if(c!=s[-1]):
                            l.append(s)
                            s=c
                            else:
                            s=s+c
                            l.append(s)
                            print(l)






                            share|improve this answer








                            New contributor




                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.









                            share|improve this answer



                            share|improve this answer






                            New contributor




                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.









                            answered 14 hours ago









                            TojrahTojrah

                            461




                            461




                            New contributor




                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.





                            New contributor





                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.






                            Tojrah is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.























                                2














                                Just one more alternative solution. You need no import for it in python2. In python3 you need import from functools.



                                from functools import reduce   # in python3
                                s='aaabccdddddaa'
                                reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, )





                                share|improve this answer



















                                • 5





                                  Wow...this is as unreadable as it could get...

                                  – heemayl
                                  12 hours ago
















                                2














                                Just one more alternative solution. You need no import for it in python2. In python3 you need import from functools.



                                from functools import reduce   # in python3
                                s='aaabccdddddaa'
                                reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, )





                                share|improve this answer



















                                • 5





                                  Wow...this is as unreadable as it could get...

                                  – heemayl
                                  12 hours ago














                                2












                                2








                                2







                                Just one more alternative solution. You need no import for it in python2. In python3 you need import from functools.



                                from functools import reduce   # in python3
                                s='aaabccdddddaa'
                                reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, )





                                share|improve this answer













                                Just one more alternative solution. You need no import for it in python2. In python3 you need import from functools.



                                from functools import reduce   # in python3
                                s='aaabccdddddaa'
                                reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, )






                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered 14 hours ago









                                quantummindquantummind

                                1,3541817




                                1,3541817








                                • 5





                                  Wow...this is as unreadable as it could get...

                                  – heemayl
                                  12 hours ago














                                • 5





                                  Wow...this is as unreadable as it could get...

                                  – heemayl
                                  12 hours ago








                                5




                                5





                                Wow...this is as unreadable as it could get...

                                – heemayl
                                12 hours ago





                                Wow...this is as unreadable as it could get...

                                – heemayl
                                12 hours ago











                                1














                                t=input()
                                c=[t[0]]
                                for i in range(1,len(t)):
                                if t[i]==c[-1][0]:
                                c[-1]=c[-1]+t[i]
                                else:
                                c.append(t[i])
                                print(c)





                                share|improve this answer








                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.





















                                • Please add some text to make the answer more descriptive.

                                  – v.coder
                                  7 hours ago
















                                1














                                t=input()
                                c=[t[0]]
                                for i in range(1,len(t)):
                                if t[i]==c[-1][0]:
                                c[-1]=c[-1]+t[i]
                                else:
                                c.append(t[i])
                                print(c)





                                share|improve this answer








                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.





















                                • Please add some text to make the answer more descriptive.

                                  – v.coder
                                  7 hours ago














                                1












                                1








                                1







                                t=input()
                                c=[t[0]]
                                for i in range(1,len(t)):
                                if t[i]==c[-1][0]:
                                c[-1]=c[-1]+t[i]
                                else:
                                c.append(t[i])
                                print(c)





                                share|improve this answer








                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.










                                t=input()
                                c=[t[0]]
                                for i in range(1,len(t)):
                                if t[i]==c[-1][0]:
                                c[-1]=c[-1]+t[i]
                                else:
                                c.append(t[i])
                                print(c)






                                share|improve this answer








                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.









                                share|improve this answer



                                share|improve this answer






                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.









                                answered 8 hours ago









                                Mr.AMr.A

                                112




                                112




                                New contributor




                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.





                                New contributor





                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.






                                Mr.A is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.













                                • Please add some text to make the answer more descriptive.

                                  – v.coder
                                  7 hours ago



















                                • Please add some text to make the answer more descriptive.

                                  – v.coder
                                  7 hours ago

















                                Please add some text to make the answer more descriptive.

                                – v.coder
                                7 hours ago





                                Please add some text to make the answer more descriptive.

                                – v.coder
                                7 hours ago



                                Popular posts from this blog

                                How did Captain America manage to do this?

                                迪纳利

                                南乌拉尔铁路局