def get_features_list(df, contains:list=[], contains_not:list=[], sort_results = True, verbose=True):
    """
    Returns list of continous or categorical features from DataFrame.
    contains: must contain all strings in list
    contains_not: must not contain any of strings in list
    """

    column_list = [col for col in df.columns]

    for s in contains:     column_list = [col for col in column_list if col.find(s)> -1]
    for s in contains_not: column_list = [col for col in column_list if col.find(s)== -1]

    if sort_results: column_list = sorted(column_list)
        
    if verbose:
        print('found columns:', len(column_list))
        diff = len(column_list) - len(list(set(column_list)))
        if diff>0: print('found', diff, 'duplicate column names')
    
    return column_list