-1

I have

my_list = ['a','1','b','2','c','1','d','6']

I want to print:

>>letter: a number 1
  letter: b number 2
  letter: c number 1
  letter: d number 6

I've tried

for i, x in enumerate(my_list):
    print(f"letter {x} number {my_list[i+1]}")

but this prints

letter a number 1
letter 1 number b
letter b number 2
letter 2 number c
letter c number 1
letter 1 number d
letter d number 6

Seems I need to increment the x by 1 but how do I do that in the loop?

U12-Forward
  • 65,118
  • 12
  • 70
  • 89
magicsword
  • 1,071
  • 2
  • 15
  • 24

4 Answers4

1

Do zipping

my_list = ['a','1','b','2','c','1','d','6']

for i,j in zip(my_list[::2],my_list[1::2]):
    print(f"letter {i} number {j}")

Output:

letter a number 1
letter b number 2
letter c number 1
letter d number 6

enumerate returns a counter with the element starting from 0. But looking from the output, you need to zip() alternate elements.

0

Try the following code with zip and '\n'.join:

my_list = ['a','1','b','2','c','1','d','6']
print('\n'.join([f"letter {x} number {i}" for x, i in zip(my_list[::2], my_list[1::2])]))

Or try with print like this:

print(*[f"letter {x} number {i}" for x, i in zip(my_list[::2], my_list[1::2])], sep='\n')

Both codes output:

letter a number 1
letter b number 2
letter c number 1
letter d number 6
U12-Forward
  • 65,118
  • 12
  • 70
  • 89
0

No enumeration needed, as you have the numbers in your data already. One concise way would zip an iterator with itself:

it = iter(my_list)
for x, y in zip(it, it):
    print(f"letter {x} number {y}")
user2390182
  • 67,685
  • 6
  • 55
  • 77
0

You can try changing the step parameter of range function -

for i in range(0,len(my_list),2):
    print(f"letter {my_list[i]} number {my_list[i+1]}")

Result:

letter a number 1
letter b number 2
letter c number 1
letter d number 6
PCM
  • 2,692
  • 2
  • 7
  • 29