美文网首页
Python数据类型-列表(List)

Python数据类型-列表(List)

作者: 天堂鸟_21d0 | 来源:发表于2019-01-10 10:18 被阅读0次

列表是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)))

相关文章

网友评论

      本文标题:Python数据类型-列表(List)

      本文链接:https://www.haomeiwen.com/subject/rjpwrqtx.html