'Recursively compares lists contents equivalence, ignoring types and element orders.
Lists with same size are compared value by value after a sort,
each element is converted to str before the comparison.
:arg list first_resource: first list
:arg list second_resource: second list
:return: True when equal; False when different.'

def compare_list(self, first_resource, second_resource):

    resource1 = first_resource
    resource2 = second_resource
    debug_resources = 'resource1    =    {0},    resource2    =    {1}'.format(resource1, resource2)
    if (not resource2):
        self.module.log(('resource    2    is    null.    ' + debug_resources))
        return False
    if (len(resource1) != len(resource2)):
        self.module.log(('resources    have    different    length.    ' + debug_resources))
        return False
    resource1 = sorted(resource1, key=_str_sorted)
    resource2 = sorted(resource2, key=_str_sorted)
    for (i, val) in enumerate(resource1):
        if isinstance(val, collections.Mapping):
            if (not self.compare(val, resource2[i])):
                self.module.log(('resources    are    different.    ' + debug_resources))
                return False
        elif isinstance(val, list):
            if (not self.compare_list(val, resource2[i])):
                self.module.log(('lists    are    different.    ' + debug_resources))
                return False
        elif (_standardize_value(val) != _standardize_value(resource2[i])):
            self.module.log(('values    are    different.    ' + debug_resources))
            return False
    return True
