Python数据类型-列表(List)

列表是Python最常用的数据类型,是以一个方括号内的逗号分隔值出现,列表内的数据项不必相同。

如果我们收到一个"Give Me 5!“的字符串信息。O(∩_∩)O.

s = "Give Me 5!"

以下代码会为我们生成一个与之相关的列表。

列表推导式  s1=[x for x in s] 生成 ['G', 'i', 'v', 'e', ' ', 'M', 'e', ' ', '5', '!']  从这我们可以看到列表内的元素确实可以不同。

列表推导式是从另外一个列表经过处理生成新列表的方法,这个方法由自己选用。

例1: s = [2017, 600776, 2592, 2811, 600775]

s1 = [str(x).zfill(6) for x in s] 生成 ['002017', '600776', '002592', '002811', '600775]

例2:s = [1,2, 3, 4, 5],s1 = ['a','b','c','d','e']

s2 =[(x,y) for x,y in zip(s,s1)] 生成 [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

例3: s = os.listdir(os.getcwd())

s1=[x for x in s if x.endswith(".ipynb") ] 生成 ['thskp.ipynb', 'ths.ipynb', 'caa.ipynb']

这其实是当前文件夹下文件类型是.ipynb的文件列表,是不是很有趣呢。

例4: s=['hoooyannn','luuuwooo']

s1 = ['163.com','qq.com']

s2 = [m+"@"+n for m in s for n in s1] 生成 ['hoooyannn@163.com', 'hoooyannn@qq.com', 'luuuwooo@163.com', 'luuuwooo@qq.com']

这里实际上是两层循环,生成了两个列表列表项的组合,试试吧。

例5:s1=  [1,2, 3, 4, 5]   s2= [3, 4, 5,6,7]

s = [x for x in s1 if x not in s2]

这实际上是s1和s2的差集

例6:s1=  [1,2, 3, 4, 5]   s2= [3, 4, 5,6,7]

s = [x for x in s1 if x in s2]

这实际上是s1和s2的交集

内置函数str.split s2 = s.split(" ") 生成 ['Give', 'Me', '5!']   split()中的参数是分割的标志,这里是以空格为分割。

内置函数list() 可以把其它可迭代元素转换成一个列表

假如我们有如下一个Series对象 s = pd.Series(data=['002017', '600776', '002592', '002811', '600775'],name='code')

0    002017

1    600776

2    002592

3    002811

4    600775

Name: code, dtype: object

将它转换为一个列表对象 s = list(s) 将生成 ['002017', '600776', '002592', '002811', '600775']

可以用来转换任何可迭代的对象,如元组,字典,集合都是常见的可迭代对象。

当前也可以直接定义列表对象。 s =['I','Love','Python'] ,一对方括号内定义逗号分隔的不同项,就是列表类型。

列表常用操作

append:

s= ['Give', 'Me', '5!']

s.append("Thanks!")

那么会得到 s= ['Give', 'Me', '5!', 'Thanks!']

insert:

s= ['Give', 'Me', '5!']

s.insert(0,"Please")

s.insert(-1,"best")

那么会得到 s=['Please', 'Give', 'Me', 'best', '5!']

remove:

s = ['hoooyannn@163.com', 'hoooyannn@qq.com', 'luuuwooo@163.com', 'luuuwooo@qq.com']

s2 = ['luuuwooo@163.com', 'luuuwooo@qq.com']

for x in s2:

    s.remove(s2)

那么会得到s = ['hoooyannn@163.com', 'hoooyannn@qq.com']

pop:

s= ['Give', 'Me', '5!']

m = s.pop() 

会得到 s=['Give', 'Me']    m= '5!'

可利用该特性使用列表定义一个堆栈。

extend:

s1 = ['luuuwooo@163.com', 'luuuwooo@qq.com']

s2 = ['hoooyannn@163.com', 'hoooyannn@qq.com']

s1.extend(s2)

会得到 s1=['luuuwooo@163.com', 'luuuwooo@qq.com', 'hoooyannn@163.com', 'hoooyannn@qq.com']

s2不变。

index:

s= ['Please','Give', 'Me', '5!']

m = s.index(‘Give')

会得到 m = 1 该列表中’Give'出现的位置索引。如果参数项在列表中不存在,会出现异常,所以最好先用in,

not in,或者s.count('Give')先做判断。

reverse:

s=['Enough','is','enough']

s.reverse()

得到s=['enough', 'is', 'Enough']

总结起来就是,如果想删除列表末尾项,用pop,删除指定项,用remove,获取指定项的索引用index。

使插入的元素在列表末尾用append,指定插入元素的位置用insert,如果增加来自另外一个列表的

列表项用extend。

改变现有列表可用reverse反转。

列表扩展

使用列表构造一个堆栈,堆栈具有后进先出(LIFO)的特征。

class Stack():

    """

    stack is a last in first out

    data structure

    """

    def __init__(self,size):

        """

        A stack is a last in first out

        data structure

        :type size:int

        """

        self.size = size

        self.stack=[]

        self.top=-1

    # Getter function

    @property

    def size(self):

        return self._size


    # Setter function

    @size.setter

    def size(self, value):

        if not isinstance(value, int):

            raise TypeError('Expected a int')

        if not value > 0:

            raise ValueError('Expected value bigger than zero')

        self._size= value


    # Deleter function

    @size.deleter

    def size(self):

        raise AttributeError("Can't delete attribute")


    def push(self,x):

        """

        push an object to stack

        the object is placed at the last position

        :type x: an object that is to be pushed to the stack

        """

        if self.isfull():

            raise Exception("the stack is full now")

        else:

            self.stack.append(x)


    def pop(self):

        """

        return the last pushed objected from stack

        and delete it from the stack

        """

        if self.isempty():

            raise KeyError("the stack is empty")

        else:

            self.top = self.top -1

            self.stack.pop()


    def peek(self):

        """

        return the item at the top of the stack

        raise keyerror if the stack is empty

        """

        if self.isempty():

            raise KeyError("the stack is empty")

        return self.stack[len(self.stack)-1]



    def isfull(self):

        """

        if the stack is full with object return True

        otherwise return False

        """

        return self.top +1 == self.size



    def isempty(self):

        """

        if no object in the stack return True

        otherwise return False

        """

        return self.top -1 == -1


    def show(self):

        """

        display the objects in stack

        """

        print (self.stack)


    def clear(self):

        """

        delete all objects from the stack

        """

        self.stack=[]

        self.top=-1


    def __iter__(self):

        """

        visit items from top to bottom of stack

        """

        length = len(self.stack)

        for i in range(length):

            yield self.stack[length-i-1]

在这里实现了固定大小的堆栈,并且在初始化时检查参数类型。

实验一下:

s = Stack(10)

for i in range(5):

    s.push(i)

s.show() 显示 [0, 1, 2, 3, 4]

m = iter(s)

for i in range(len(s)):

    print(next(m))

列表和字符串的转换:

l= ['Please','Give', 'Me', '5!']

s = " ".join(l)

这样我们将列表还原成了字符串,实际生成s="Please Give Me 5!"


列表的并集,差集,交集:

有如下两个list:

listA=["apple","banana","pears","tomato"]

listB=["tomato","chilli"]

交集:

inte = list(set(listA).intersection(set(listB)))

并集:

uni = list(set(listA).union(set(listB)))

差集:

diff = list(set(listA).difference(set(listB)))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 文/澧之谣 “怡春楼”是长安城一个热闹繁华的所在,但是这对于幼微母女二人来说,并没有太多的影响。相比前院的热闹,幼...
    澧之谣阅读 1,249评论 5 10
  • 【0309能量按钮】6287-蒲公英 推荐人:三连老铁3194-蘑菇猫 & 五连老铁 5286-快乐中国520 支...
    蒲公英_2018阅读 196评论 0 0
  • 今天是喧闹已久的进博会开幕,一早朋友圈被交通障碍刷屏。按照政府的号召,今天应该出勤的部分国家机构和学校都是放假的,...
    Virginia浓阅读 278评论 0 0
  • 第一章 来到陌生的城市 A市,冷心如一...
    荷本清香阅读 1,076评论 0 1
  • 从古至今,我们一直在努力的分享着。 史前我们分享是为了生存的压力,今天我告诉你这里有野果,明天你告诉我哪里有食物。...
    Lucas的学习笔记阅读 198评论 0 0

友情链接更多精彩内容