def str_or_list_like(x):
    """Determine if x is list-list (list, tuple) using duck-typing.

    Here is a set of Attributes for different classes
    |         x          |      type(x)       |    x.strip    | x.__getitem__ |  x.__iter__   |
    |         aa         |   <class 'str'>    |     True      |     True      |     True      |
    |     ['a', 'b']     |   <class 'list'>   |     False     |     True      |     True      |
    |     ('a', 'b')     |  <class 'tuple'>   |     False     |     True      |     True      |
    |     {'b', 'a'}     |   <class 'set'>    |     False     |     False     |     True      |
    |  {'a': 1, 'b': 2}  |   <class 'dict'>   |     False     |     True      |     True      |
    """

    if hasattr(x, "strip"):
        return "str"
    elif hasattr(x, "__getitem__") or hasattr(x, "__iter__"):
        return "list_like"
    else:
        return "others"