def setdiff(list1, list2):
    """
    returns list1 elements that are not in list2. preserves order of list1

    Args:
        list1 (list):
        list2 (list):

    Returns:
        list: new_list

    Example:
        >>> list1 = ['featweight_rowid', 'feature_rowid', 'config_rowid', 'featweight_forground_weight']
        >>> list2 = [u'featweight_rowid']
        >>> new_list = setdiff(list1, list2)
        >>> result = ub.repr2(new_list, nl=False)
        >>> print(result)
        ['feature_rowid', 'config_rowid', 'featweight_forground_weight']
    """
    set2 = set(list2)
    return [item for item in list1 if item not in set2]