0

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?

2

5 Answers 5

1

Use list comprehension

  • Iterate till second last value of the list
  • get current and next value as a tuple.
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')]
Sign up to request clarification or add additional context in comments.

Comments

0

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')]

3 Comments

can you explain zip here, so i can add a comment to my code to remember.
You can check my answer and also the doc
list(zip(my_list, my_list[1:])) will work the same.
0
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.

Comments

0
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)] 

Comments

0
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')]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.