Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate through two lists of different lengths

Tags:

python

list

I have the following two lists:

nums = [1, 2, 3, 4, 5, 6, 7, 8]

ltrs = ['a', 'b', 'c', 'd']

for x, y in nums, ltrs:
    print(x, y)

With the following error

c:\Python35\Scripts>python listtest.py
Traceback (most recent call last):
  File "listtest.py", line 5, in <module>
    for x, y in nums, ltrs:
ValueError: too many values to unpack (expected 2)

I would like for the output to be:

1a, 2b, 3c, 4d, 5, 6, 7, 8

From what I have read the zip method will only work if the two lists are the same length, what are my options with lists of different lengths?

like image 423
I.T. Guy Avatar asked Oct 03 '17 23:10

I.T. Guy


People also ask

How do you iterate over a list length?

We can iterate through a list by using the range() function and passing the length of the list. It will return the index from 0 till the end of the list. The output would be the same as above.

How do you iterate two values in Python?

Use the zip() Function for Multiple Assignments in a Tuple or a List in Python. The zip() function is a built-in function offered in Python and is utilized to create an iterator that will interact with and combine elements from two or more given iterables.


1 Answers

You can use itertools.zip_longest for Python3:

import itertools
nums = [1, 2, 3, 4, 5, 6, 7, 8]
ltrs = ['a', 'b', 'c', 'd']
final_list = [''.join([str(c) if isinstance(c, int) else c for c in [i for i in b if i is not None]]) for b in itertools.zip_longest(nums, ltrs)]

Output:

['1a', '2b', '3c', '4d', '5', '6', '7', '8'] 
like image 67
Ajax1234 Avatar answered Oct 23 '22 09:10

Ajax1234