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)))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,527评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,687评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,640评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,957评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,682评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,011评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,009评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,183评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,714评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,435评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,665评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,148评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,838评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,251评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,588评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,379评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,627评论 2 380

推荐阅读更多精彩内容

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