-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?

U13-Forward
  • 69,221
  • 14
  • 89
  • 114
magicsword
  • 1,179
  • 3
  • 16
  • 26

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
U13-Forward
  • 69,221
  • 14
  • 89
  • 114
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
  • 72,016
  • 6
  • 67
  • 89
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,881
  • 2
  • 8
  • 30