How do I slice a string by characters in Python? [duplicate]
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?
python
marked as duplicate by Kasrâmvd
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();
}
);
});
});
yesterday
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.
add a comment |
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?
python
marked as duplicate by Kasrâmvd
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();
}
);
});
});
yesterday
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
yesterday
add a comment |
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?
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
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
python
edited yesterday
Peter Mortensen
13.8k1987113
13.8k1987113
asked yesterday
Hank ChowHank Chow
571
571
marked as duplicate by Kasrâmvd
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();
}
);
});
});
yesterday
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
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();
}
);
});
});
yesterday
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
yesterday
add a comment |
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
yesterday
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
yesterday
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
yesterday
add a comment |
5 Answers
5
active
oldest
votes
Use itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
add a comment |
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']
add a comment |
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)
New contributor
add a comment |
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, )
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
add a comment |
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)
New contributor
Please add some text to make the answer more descriptive.
– v.coder
yesterday
add a comment |
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
add a comment |
Use itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
add a comment |
Use itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
Use itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
edited yesterday
Aran-Fey
20.1k53671
20.1k53671
answered yesterday
AustinAustin
12.3k3930
12.3k3930
add a comment |
add a comment |
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']
add a comment |
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']
add a comment |
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']
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']
answered yesterday
denis_lordenis_lor
1,45611130
1,45611130
add a comment |
add a comment |
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)
New contributor
add a comment |
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)
New contributor
add a comment |
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)
New contributor
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)
New contributor
New contributor
answered yesterday
TojrahTojrah
461
461
New contributor
New contributor
add a comment |
add a comment |
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, )
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
add a comment |
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, )
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
add a comment |
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, )
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, )
answered yesterday
quantummindquantummind
1,3541817
1,3541817
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
add a comment |
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
5
5
Wow...this is as unreadable as it could get...
– heemayl
yesterday
Wow...this is as unreadable as it could get...
– heemayl
yesterday
add a comment |
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)
New contributor
Please add some text to make the answer more descriptive.
– v.coder
yesterday
add a comment |
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)
New contributor
Please add some text to make the answer more descriptive.
– v.coder
yesterday
add a comment |
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)
New contributor
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)
New contributor
New contributor
answered yesterday
Mr.AMr.A
112
112
New contributor
New contributor
Please add some text to make the answer more descriptive.
– v.coder
yesterday
add a comment |
Please add some text to make the answer more descriptive.
– v.coder
yesterday
Please add some text to make the answer more descriptive.
– v.coder
yesterday
Please add some text to make the answer more descriptive.
– v.coder
yesterday
add a comment |
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
yesterday