Reputation: 3
I'm making a little data base on python.
my_list = ['jack', 'liam', 'gary', 'poly']
I want to convert the list into this
result = [('jack', 'liam'),('liam', 'gary'),('gary', 'poly')]
Is there anyway i can do this?
Upvotes: 0
Views: 100
Reputation: 2243
Use list comprehension
my_list = ['jack', 'liam', 'gary', 'poly']
new_list = [(my_list[i],my_list[i+1]) for i in range(len(my_list)-1)]
print(new_list)
>> [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
Or Use zip()
which will return consecutive combinations as tuple.
my_list = ['jack', 'liam', 'gary', 'poly']
new_list = list(zip(my_list, my_list[1:]))
print(new_list)
>> [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
Upvotes: 1
Reputation: 147
my_list = ['jack', 'liam', 'gary', 'poly']
result = []
for i in range(0, len(my_list)):
if not i > len(my_list)-2:
result.append((my_list[i], my_list[i+1]))
output
[('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
Upvotes: 0
Reputation: 697
result = []
my_list = ['jack', 'liam', 'gary', 'poly']
for i, item in enumerate(my_list):
if i+1 == len(my_list): break
result.append((item, my_list[i+1]))
Or more Pythonic and elegant way:
result = [(item, my_list[i+1]) for i, item in enumerate(my_list) if i+1 < len(my_list)]
Upvotes: 0
Reputation: 284
my_list = ['jack', 'liam', 'gary', 'poly']
result_list = [(my_list[i],my_list[i+1]) for i in range(len(my_list) - 1)]
print(result_list)
Output
[('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
We can fetch 2 elements into a tuple till we iterate and reach the second last element.
Upvotes: 0
Reputation: 2647
zip
will return a tuple from two iterables; if you take the same list, but shifted as you wish (in this case, one element forward) you can have your expected result.
Also, the generator will exhaust on the shortest iterable (the second one).
>>> [(a,b) for (a,b) in zip(my_list, my_list[1:])]
[('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
Upvotes: 0