@@ -881,16 +881,7 @@ def set_levels(self, levels, level=None, inplace=None, verify_integrity=True):
881881 if is_list_like (levels ) and not isinstance (levels , Index ):
882882 levels = list (levels )
883883
884- if level is not None and not is_list_like (level ):
885- if not is_list_like (levels ):
886- raise TypeError ("Levels must be list-like" )
887- if is_list_like (levels [0 ]):
888- raise TypeError ("Levels must be list-like" )
889- level = [level ]
890- levels = [levels ]
891- elif level is None or is_list_like (level ):
892- if not is_list_like (levels ) or not is_list_like (levels [0 ]):
893- raise TypeError ("Levels must be list of lists-like" )
884+ level , levels = _require_listlike (level , levels , "Levels" )
894885
895886 if inplace :
896887 idx = self
@@ -1050,16 +1041,7 @@ def set_codes(self, codes, level=None, inplace=None, verify_integrity=True):
10501041 else :
10511042 inplace = False
10521043
1053- if level is not None and not is_list_like (level ):
1054- if not is_list_like (codes ):
1055- raise TypeError ("Codes must be list-like" )
1056- if is_list_like (codes [0 ]):
1057- raise TypeError ("Codes must be list-like" )
1058- level = [level ]
1059- codes = [codes ]
1060- elif level is None or is_list_like (level ):
1061- if not is_list_like (codes ) or not is_list_like (codes [0 ]):
1062- raise TypeError ("Codes must be list of lists-like" )
1044+ level , codes = _require_listlike (level , codes , "Codes" )
10631045
10641046 if inplace :
10651047 idx = self
@@ -3870,3 +3852,20 @@ def _coerce_indexer_frozen(array_like, categories, copy: bool = False) -> np.nda
38703852 array_like = array_like .copy ()
38713853 array_like .flags .writeable = False
38723854 return array_like
3855+
3856+
3857+ def _require_listlike (level , arr , arrname : str ):
3858+ """
3859+ Ensure that level is either None or listlike, and arr is list-of-listlike.
3860+ """
3861+ if level is not None and not is_list_like (level ):
3862+ if not is_list_like (arr ):
3863+ raise TypeError (f"{ arrname } must be list-like" )
3864+ if is_list_like (arr [0 ]):
3865+ raise TypeError (f"{ arrname } must be list-like" )
3866+ level = [level ]
3867+ arr = [arr ]
3868+ elif level is None or is_list_like (level ):
3869+ if not is_list_like (arr ) or not is_list_like (arr [0 ]):
3870+ raise TypeError (f"{ arrname } must be list of lists-like" )
3871+ return level , arr
0 commit comments