def interleave_uneven(list1, list2, list1_start=0, list2_start=0,
    list1_step=1, list2_step=1):
    """ Given 2 lists interleave between each list every n steps 
       optionally offset the start of either list but loop round so all results are returned.
    Args:
      list1: line start
      list2: line end
      list1_start: optionally offset start position of first list zero by default
      list2_start: optionally offset start position of second list zero by default
      list1_step: number of items to return before switching lists
      list2_step: number of items to return before switching lists

    Returns:
      list item: current item in list

    Links:"""
    length1 = len(list1) - 1
    length2 = len(list2) - 1
    length = length1 + length2
    list1_pos = list1_start
    list2_pos = list2_start
    pos = 0
    while pos < length:
        for i in range(0, list1_step):
            yield list1[list1_pos]
            list1_pos += 1
            if list1_pos > length1:
                list1_pos = 0
            pos += 1
        for i in range(0, list2_step):
            yield list2[list2_pos]
            list2_pos += 1
            if list2_pos > length2:
                list2_pos = 0
            pos += 1
