python 切片slice和实现一个切片类

alist=[2,5,32,34,11,44,65,113]
print(alist[::])##取所有alist [2, 5, 32, 34, 11, 44, 65, 113]
print(alist[::-1])##alist倒序 [113, 65, 44, 11, 34, 32, 5, 2]
print(alist[::2])##取alist偶数位数值 [2, 32, 11, 65]
print(alist[1::2])##取alist奇数位数值 [5, 34, 44, 113]
print(alist[3:1:-1])##取[34,32]
alist[:0]=[22,33] ##在头插入22,33
print(alist)  #[22, 33, 2, 5, 32, 34, 11, 44, 65, 113]
import numbers


class Group:
    def __init__(self,group_name,company_name,staffs):
        self.group_name=group_name
        self.company_name = company_name
        self.staffs = staffs

    def __getitem__(self, item):
        cls=type(self)
        # if isinstance(item,slice):
        #     return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])
        # elif isinstance(item,numbers.Integral):
        #     return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])
        _staffs=self.staffs[item] if isinstance(item,slice) else [self.staffs[item]]
        return cls(group_name=self.group_name, company_name=self.company_name, staffs=_staffs)
        # return self

    def __reversed__(self):
        self.staffs.reverse()

    def __len__(self):
        return len(self.staffs)

    def __iter__(self):
        return iter(self.staffs)

    def __contains__(self, item):
        return (item in self.staffs)

    def __str__(self):
        return ','.join(self.staffs)
group=Group('czbsit','staff',['aa','lisi','zhangsan','wangwu'])
subgroup=group[:2]
print(subgroup)
#reversed(group)
print(group)

  

  

posted @ 2024-01-17 15:14  howhy  阅读(4)  评论(0编辑  收藏  举报