Adding strings in lists together
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{
margin-bottom:0;
}
I want to transform the list ["A","B","A","A","B"]
to the list ["AB","BA","AA","AB"]
.
I have tried to define a new list in which the first element is deleted and then add the strings of the lists together. After which I plan to delete the last element of the new list to get the result.
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
But all I get is
TypeError: 'list' object cannot be interpreted as an integer
Any help is welcome.
Edit : Thank you guys, all your solutions worked perfectly :)
python string list
add a comment
|
I want to transform the list ["A","B","A","A","B"]
to the list ["AB","BA","AA","AB"]
.
I have tried to define a new list in which the first element is deleted and then add the strings of the lists together. After which I plan to delete the last element of the new list to get the result.
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
But all I get is
TypeError: 'list' object cannot be interpreted as an integer
Any help is welcome.
Edit : Thank you guys, all your solutions worked perfectly :)
python string list
add a comment
|
I want to transform the list ["A","B","A","A","B"]
to the list ["AB","BA","AA","AB"]
.
I have tried to define a new list in which the first element is deleted and then add the strings of the lists together. After which I plan to delete the last element of the new list to get the result.
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
But all I get is
TypeError: 'list' object cannot be interpreted as an integer
Any help is welcome.
Edit : Thank you guys, all your solutions worked perfectly :)
python string list
I want to transform the list ["A","B","A","A","B"]
to the list ["AB","BA","AA","AB"]
.
I have tried to define a new list in which the first element is deleted and then add the strings of the lists together. After which I plan to delete the last element of the new list to get the result.
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
But all I get is
TypeError: 'list' object cannot be interpreted as an integer
Any help is welcome.
Edit : Thank you guys, all your solutions worked perfectly :)
python string list
python string list
edited May 28 at 16:18
Olvin Roght
3,1091 gold badge3 silver badges22 bronze badges
3,1091 gold badge3 silver badges22 bronze badges
asked May 28 at 11:30
MattjoMattjo
725 bronze badges
725 bronze badges
add a comment
|
add a comment
|
4 Answers
4
active
oldest
votes
Best solution, using zip
, cleverest:
>>> l = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(l, l[1:])]
['AB', 'BA', 'AA', 'AB']
>>>
Or use this list comprehension:
>>> l = ["A","B","A","A","B"]
>>> [v + l[i + 1] for i, v in enumerate(l[:-1])]
['AB', 'BA', 'AA', 'AB']
>>>
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
add a comment
|
Use zip()
:
>>> lst = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(lst, lst[1:])]
['AB', 'BA', 'AA', 'AB']
add a comment
|
You can use map()
:
s = list(map(str.__add__, lst[:-1], lst[1:]))
A bit better to use operator.concat()
(thanks for advice, @MykolaZotko):
import operator
s = list(map(operator.concat, lst[:-1], lst[1:]))
Upd.
I've decided to do some tests on bigger data.
import operator
lst = [...] # list with 10000 random uppercase letters
def test1():
return list(map(operator.concat, lst[:-1], lst[1:]))
def test2():
return [x + y for x, y in zip(lst, lst[1:])]
def test3():
return [v + lst[i + 1] for i, v in enumerate(lst[:-1])]
def test4():
s = ''.join(lst)
return [s[i:i + 2] for i in range(len(s) - 1)]
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1, lst", number=10000))
print(timeit.timeit("test2()", setup="from __main__ import test2, lst", number=10000))
print(timeit.timeit("test3()", setup="from __main__ import test3, lst", number=10000))
print(timeit.timeit("test4()", setup="from __main__ import test4, lst", number=10000))
Results:
Python 2:
10.447159509
11.529946446
20.962497298000002
20.515838672
Python 3:
10.370675522
11.429417197
20.836504865999995
20.422865353
On bigger data map()
is a bit (~9%) faster, but there's no significant difference between test1()
and test2()
1
You can useoperator.add
oroperator.concat
as well. Strange thatmap
is faster. Normallymap
is slower than listcomp.
– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
add a comment
|
There are several issues in your original code:
sequences = ["A","B","A","A","B"]
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Firstly, the statement lista = sequences
does not make a copy of sequences. Instead, lista
and sequences
become two different names for the same list. What you do using one name also happens to the other. lista.pop(0)
is the same as sequences.pop(0)
. If you want a copy, then import the copy
library.
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Secondly, your statement range(sequences)
is incorrect. The range()
function accepts integers as input, not lists. That's what gave you TypeError: 'list' object cannot be interpreted as an integer
# VALID
range(5)
range(3)
range(10)
# INVALID
range(["A","B","A"])
range(["eyes", "nose", "tail"])
sequences
is a list. You want range(len(sequences))
notrange(sequences)
In the end, we can modify your original code to work:
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista) # prints ["B","A","A","B"]
mc = list()
for x in range(len(lista)):
mc.append(lista[x] + sequences[x + 1])
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%2f56341236%2fadding-strings-in-lists-together%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Best solution, using zip
, cleverest:
>>> l = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(l, l[1:])]
['AB', 'BA', 'AA', 'AB']
>>>
Or use this list comprehension:
>>> l = ["A","B","A","A","B"]
>>> [v + l[i + 1] for i, v in enumerate(l[:-1])]
['AB', 'BA', 'AA', 'AB']
>>>
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
add a comment
|
Best solution, using zip
, cleverest:
>>> l = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(l, l[1:])]
['AB', 'BA', 'AA', 'AB']
>>>
Or use this list comprehension:
>>> l = ["A","B","A","A","B"]
>>> [v + l[i + 1] for i, v in enumerate(l[:-1])]
['AB', 'BA', 'AA', 'AB']
>>>
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
add a comment
|
Best solution, using zip
, cleverest:
>>> l = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(l, l[1:])]
['AB', 'BA', 'AA', 'AB']
>>>
Or use this list comprehension:
>>> l = ["A","B","A","A","B"]
>>> [v + l[i + 1] for i, v in enumerate(l[:-1])]
['AB', 'BA', 'AA', 'AB']
>>>
Best solution, using zip
, cleverest:
>>> l = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(l, l[1:])]
['AB', 'BA', 'AA', 'AB']
>>>
Or use this list comprehension:
>>> l = ["A","B","A","A","B"]
>>> [v + l[i + 1] for i, v in enumerate(l[:-1])]
['AB', 'BA', 'AA', 'AB']
>>>
edited May 28 at 12:43
answered May 28 at 11:31
U10-ForwardU10-Forward
28.6k5 gold badges25 silver badges50 bronze badges
28.6k5 gold badges25 silver badges50 bronze badges
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
add a comment
|
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
1
1
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Swap your code examples, please. Your first variant is two times slower than second ;)
– Olvin Roght
May 28 at 12:42
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
Note: The issue addressed by @OlvinRoght is already handled.
– Taegyung
Jun 26 at 21:12
add a comment
|
Use zip()
:
>>> lst = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(lst, lst[1:])]
['AB', 'BA', 'AA', 'AB']
add a comment
|
Use zip()
:
>>> lst = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(lst, lst[1:])]
['AB', 'BA', 'AA', 'AB']
add a comment
|
Use zip()
:
>>> lst = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(lst, lst[1:])]
['AB', 'BA', 'AA', 'AB']
Use zip()
:
>>> lst = ["A","B","A","A","B"]
>>> [x + y for x, y in zip(lst, lst[1:])]
['AB', 'BA', 'AA', 'AB']
answered May 28 at 11:32
RoadRunnerRoadRunner
12.8k3 gold badges16 silver badges42 bronze badges
12.8k3 gold badges16 silver badges42 bronze badges
add a comment
|
add a comment
|
You can use map()
:
s = list(map(str.__add__, lst[:-1], lst[1:]))
A bit better to use operator.concat()
(thanks for advice, @MykolaZotko):
import operator
s = list(map(operator.concat, lst[:-1], lst[1:]))
Upd.
I've decided to do some tests on bigger data.
import operator
lst = [...] # list with 10000 random uppercase letters
def test1():
return list(map(operator.concat, lst[:-1], lst[1:]))
def test2():
return [x + y for x, y in zip(lst, lst[1:])]
def test3():
return [v + lst[i + 1] for i, v in enumerate(lst[:-1])]
def test4():
s = ''.join(lst)
return [s[i:i + 2] for i in range(len(s) - 1)]
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1, lst", number=10000))
print(timeit.timeit("test2()", setup="from __main__ import test2, lst", number=10000))
print(timeit.timeit("test3()", setup="from __main__ import test3, lst", number=10000))
print(timeit.timeit("test4()", setup="from __main__ import test4, lst", number=10000))
Results:
Python 2:
10.447159509
11.529946446
20.962497298000002
20.515838672
Python 3:
10.370675522
11.429417197
20.836504865999995
20.422865353
On bigger data map()
is a bit (~9%) faster, but there's no significant difference between test1()
and test2()
1
You can useoperator.add
oroperator.concat
as well. Strange thatmap
is faster. Normallymap
is slower than listcomp.
– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
add a comment
|
You can use map()
:
s = list(map(str.__add__, lst[:-1], lst[1:]))
A bit better to use operator.concat()
(thanks for advice, @MykolaZotko):
import operator
s = list(map(operator.concat, lst[:-1], lst[1:]))
Upd.
I've decided to do some tests on bigger data.
import operator
lst = [...] # list with 10000 random uppercase letters
def test1():
return list(map(operator.concat, lst[:-1], lst[1:]))
def test2():
return [x + y for x, y in zip(lst, lst[1:])]
def test3():
return [v + lst[i + 1] for i, v in enumerate(lst[:-1])]
def test4():
s = ''.join(lst)
return [s[i:i + 2] for i in range(len(s) - 1)]
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1, lst", number=10000))
print(timeit.timeit("test2()", setup="from __main__ import test2, lst", number=10000))
print(timeit.timeit("test3()", setup="from __main__ import test3, lst", number=10000))
print(timeit.timeit("test4()", setup="from __main__ import test4, lst", number=10000))
Results:
Python 2:
10.447159509
11.529946446
20.962497298000002
20.515838672
Python 3:
10.370675522
11.429417197
20.836504865999995
20.422865353
On bigger data map()
is a bit (~9%) faster, but there's no significant difference between test1()
and test2()
1
You can useoperator.add
oroperator.concat
as well. Strange thatmap
is faster. Normallymap
is slower than listcomp.
– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
add a comment
|
You can use map()
:
s = list(map(str.__add__, lst[:-1], lst[1:]))
A bit better to use operator.concat()
(thanks for advice, @MykolaZotko):
import operator
s = list(map(operator.concat, lst[:-1], lst[1:]))
Upd.
I've decided to do some tests on bigger data.
import operator
lst = [...] # list with 10000 random uppercase letters
def test1():
return list(map(operator.concat, lst[:-1], lst[1:]))
def test2():
return [x + y for x, y in zip(lst, lst[1:])]
def test3():
return [v + lst[i + 1] for i, v in enumerate(lst[:-1])]
def test4():
s = ''.join(lst)
return [s[i:i + 2] for i in range(len(s) - 1)]
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1, lst", number=10000))
print(timeit.timeit("test2()", setup="from __main__ import test2, lst", number=10000))
print(timeit.timeit("test3()", setup="from __main__ import test3, lst", number=10000))
print(timeit.timeit("test4()", setup="from __main__ import test4, lst", number=10000))
Results:
Python 2:
10.447159509
11.529946446
20.962497298000002
20.515838672
Python 3:
10.370675522
11.429417197
20.836504865999995
20.422865353
On bigger data map()
is a bit (~9%) faster, but there's no significant difference between test1()
and test2()
You can use map()
:
s = list(map(str.__add__, lst[:-1], lst[1:]))
A bit better to use operator.concat()
(thanks for advice, @MykolaZotko):
import operator
s = list(map(operator.concat, lst[:-1], lst[1:]))
Upd.
I've decided to do some tests on bigger data.
import operator
lst = [...] # list with 10000 random uppercase letters
def test1():
return list(map(operator.concat, lst[:-1], lst[1:]))
def test2():
return [x + y for x, y in zip(lst, lst[1:])]
def test3():
return [v + lst[i + 1] for i, v in enumerate(lst[:-1])]
def test4():
s = ''.join(lst)
return [s[i:i + 2] for i in range(len(s) - 1)]
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1, lst", number=10000))
print(timeit.timeit("test2()", setup="from __main__ import test2, lst", number=10000))
print(timeit.timeit("test3()", setup="from __main__ import test3, lst", number=10000))
print(timeit.timeit("test4()", setup="from __main__ import test4, lst", number=10000))
Results:
Python 2:
10.447159509
11.529946446
20.962497298000002
20.515838672
Python 3:
10.370675522
11.429417197
20.836504865999995
20.422865353
On bigger data map()
is a bit (~9%) faster, but there's no significant difference between test1()
and test2()
edited May 28 at 12:38
answered May 28 at 11:40
Olvin RoghtOlvin Roght
3,1091 gold badge3 silver badges22 bronze badges
3,1091 gold badge3 silver badges22 bronze badges
1
You can useoperator.add
oroperator.concat
as well. Strange thatmap
is faster. Normallymap
is slower than listcomp.
– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
add a comment
|
1
You can useoperator.add
oroperator.concat
as well. Strange thatmap
is faster. Normallymap
is slower than listcomp.
– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
1
1
You can use
operator.add
or operator.concat
as well. Strange that map
is faster. Normally map
is slower than listcomp.– Mykola Zotko
May 28 at 11:55
You can use
operator.add
or operator.concat
as well. Strange that map
is faster. Normally map
is slower than listcomp.– Mykola Zotko
May 28 at 11:55
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
@MykolaZotko, it's not faster, few miliseconds slower, almost the same. I've done a mistake while copying data
– Olvin Roght
May 28 at 11:56
1
1
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
@OlvinRoght Would need to test on larger inputs to be sure
– RoadRunner
May 28 at 11:57
1
1
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
@RoadRunner, added some tests on bigger data.
– Olvin Roght
May 28 at 12:18
add a comment
|
There are several issues in your original code:
sequences = ["A","B","A","A","B"]
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Firstly, the statement lista = sequences
does not make a copy of sequences. Instead, lista
and sequences
become two different names for the same list. What you do using one name also happens to the other. lista.pop(0)
is the same as sequences.pop(0)
. If you want a copy, then import the copy
library.
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Secondly, your statement range(sequences)
is incorrect. The range()
function accepts integers as input, not lists. That's what gave you TypeError: 'list' object cannot be interpreted as an integer
# VALID
range(5)
range(3)
range(10)
# INVALID
range(["A","B","A"])
range(["eyes", "nose", "tail"])
sequences
is a list. You want range(len(sequences))
notrange(sequences)
In the end, we can modify your original code to work:
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista) # prints ["B","A","A","B"]
mc = list()
for x in range(len(lista)):
mc.append(lista[x] + sequences[x + 1])
add a comment
|
There are several issues in your original code:
sequences = ["A","B","A","A","B"]
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Firstly, the statement lista = sequences
does not make a copy of sequences. Instead, lista
and sequences
become two different names for the same list. What you do using one name also happens to the other. lista.pop(0)
is the same as sequences.pop(0)
. If you want a copy, then import the copy
library.
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Secondly, your statement range(sequences)
is incorrect. The range()
function accepts integers as input, not lists. That's what gave you TypeError: 'list' object cannot be interpreted as an integer
# VALID
range(5)
range(3)
range(10)
# INVALID
range(["A","B","A"])
range(["eyes", "nose", "tail"])
sequences
is a list. You want range(len(sequences))
notrange(sequences)
In the end, we can modify your original code to work:
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista) # prints ["B","A","A","B"]
mc = list()
for x in range(len(lista)):
mc.append(lista[x] + sequences[x + 1])
add a comment
|
There are several issues in your original code:
sequences = ["A","B","A","A","B"]
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Firstly, the statement lista = sequences
does not make a copy of sequences. Instead, lista
and sequences
become two different names for the same list. What you do using one name also happens to the other. lista.pop(0)
is the same as sequences.pop(0)
. If you want a copy, then import the copy
library.
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Secondly, your statement range(sequences)
is incorrect. The range()
function accepts integers as input, not lists. That's what gave you TypeError: 'list' object cannot be interpreted as an integer
# VALID
range(5)
range(3)
range(10)
# INVALID
range(["A","B","A"])
range(["eyes", "nose", "tail"])
sequences
is a list. You want range(len(sequences))
notrange(sequences)
In the end, we can modify your original code to work:
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista) # prints ["B","A","A","B"]
mc = list()
for x in range(len(lista)):
mc.append(lista[x] + sequences[x + 1])
There are several issues in your original code:
sequences = ["A","B","A","A","B"]
lista = sequences
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Firstly, the statement lista = sequences
does not make a copy of sequences. Instead, lista
and sequences
become two different names for the same list. What you do using one name also happens to the other. lista.pop(0)
is the same as sequences.pop(0)
. If you want a copy, then import the copy
library.
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista)
for x in range(sequences):
mc =sequences[x]+lista[x]
Secondly, your statement range(sequences)
is incorrect. The range()
function accepts integers as input, not lists. That's what gave you TypeError: 'list' object cannot be interpreted as an integer
# VALID
range(5)
range(3)
range(10)
# INVALID
range(["A","B","A"])
range(["eyes", "nose", "tail"])
sequences
is a list. You want range(len(sequences))
notrange(sequences)
In the end, we can modify your original code to work:
import copy
sequences = ["A","B","A","A","B"]
lista = copy.copy(sequences)
lista.pop(0)
print(lista) # prints ["B","A","A","B"]
mc = list()
for x in range(len(lista)):
mc.append(lista[x] + sequences[x + 1])
answered May 28 at 20:05
Toothpick AnemoneToothpick Anemone
5612 silver badges19 bronze badges
5612 silver badges19 bronze badges
add a comment
|
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%2f56341236%2fadding-strings-in-lists-together%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