Python知识

在Python中,最基本的数据结构是序列(sequence)。
序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1,以此类推。序列中的最后一个元素标记为 -1,倒数第二个元素为 -2,一次类推。

Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。列表和元组的主要区别在于,列表可以修改,元组则不能。

解压序列赋值多个变量

    通过赋值语句把一个序列中(元组列表字典等均可以)的多个元素分别赋值给多个变量。  
    数量要相同,如果不同则会异常。
    >>> p = (4,6)
    >>> p
    (4, 6)
    >>> x, t = p
    >>> x
    4
    >>> t
    6
    >>> 
    
    任何可以迭代的对象都是可以的,包括字符串,文件对象,迭代器生成器。  
    如果数量不同会报错
    >>> a = 'hei'
    >>> z, x, c =a
    >> z
    'h'
    >>> x
    'e'
    >>> c
    'i'
    >>> z, x = a
    Traceback (most recent call last):
    File "<pyshell#14>", line 1, in <module>
    z, x = a
    ValueError: too many values to unpack (expected 2)
    >>>
    
    有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况 Python 并没有提
    供特殊的语法。但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。

解压可迭代对象赋值多个变量

    >>> c = (1,2,3,4,5)
    >>> q, *w, e = c
    >>> q
    1
    >>> w
    [2, 3, 4]
    >>> e
    5
    >>> 
    中间的*w代替了去除第一个和最后一个元素以后的其他元素  
    同理:
    >>> re = ('name', 'age', 12345, 454654)
    >>> a, e, *t = re
    >>> a
    'name'
    >>> e
    'age'
    >>> t
    [12345, 454654]

    这就是星号表达式!!!星号表达式解压出来的都是列表类型。
    值得注意的是,星号表达式在迭代元素为可变长元组的序列时是很有用的。   
    re  = [
    ('f',1,2),
    ('t','r'),
    ('f',5,6),
    ]
    for tag, *args in re:
    print(tag)
    print(args)

    输出的是:
            f
            [1, 2]//星号表达式解压出来的都是列表类型
            t
            ['r']
            f
            [5, 6]
    

    使用星号表达式可以接收序列中的值以后再丢弃。单数必须要加上一名称,例如:*name。

保留最后的N个元素

我们在写查询元素的代码时,通常会使用包含 yield 表达式的生成器函数。这样可以将搜索过程代码和使用搜索结果代码解耦。
使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。deque是一个类。需要导入。

    from collections import deque
    q = deque(maxlen=3)
    q.append(1)
    q.append(2)
    q.append(3)
    deque的操作方法和列表的类似。可以用append。maxlen是设定最大的个数。
    当再添加的时候,最先被添加的元素会被移除。

    >>> from collections import deque
    >>> q = deque(maxlen=4)
    >>> type(q)
    <class 'collections.deque'>


    >>> q = deque(maxlen=3)
    >>> q
    deque([], maxlen=3)
    >>> q.append(1)
    >>> q.append(2)
    >>> q.append(3)
    >>> q
    deque([1, 2, 3], maxlen=3)
    >>> q.appendleft(4)
    >>> q
    deque([4, 1, 2], maxlen=3)
    >>> q.pop()
    2
    >>> q
    deque([4, 1], maxlen=3)
    >>> q.pop()
    1
    >>> q
    deque([4], maxlen=3)
    >>> q.appendright(5)
    Traceback (most recent call last):
      File "<pyshell#204>", line 1, in <module>
        q.appendright(5)
    AttributeError: 'collections.deque' object has no attribute 'appendright'
    >>> 

    后面的maxlen是设定长度。添加的方式和列表的操作方式一样。
    只有appendleft方法,从前面添加后面移除。  
    没有appendright方法。
    pop()是删除,从后面开始移除元素,并且返回。

查找最大或最小的N个元素

heapq模块中的两个函数:nlargest()和nsmllest()

    >>> import heapq
    >>> nums =[1,2,4,545,23,213,3,54,65765,7,4214,231,0]
    >>> heapq.nlargest(3, nums)
    [65765, 4214, 545]
    >>> heapq.nsmallest(3, nums)
    [0, 1, 2]
    >>> 

    例子:
    portfolio = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
    ]
    
    cheap = heapq.nsmallest(3, portfolio, key=lambda s:s['price'])
    
    print(cheap)
    
    输出:
        [
        {'name': 'YHOO', 'shares': 45, 'price': 16.35},
         {'name': 'FB', 'shares': 200, 'price': 21.09}, 
        {'name': 'HPQ', 'shares': 35, 'price': 31.75}
        ]
    

    
    #cheap = heapq.nsmallest(3, portfolio, key=lambda s:s['price'])
    这句是以price为一句进行对比大小。key=lambda s:s['price']是选取price为依据。

    <hr>
    nums = [1,2,3,4,45,5,4,4,6565,453,22]
    heapq.heapify(nums)
    # print(nums)
    print(heapq.heappop(nums))
    print(nums)
    print(heapq.heappop(nums))
    print(nums)


    输出:
        1
        [2, 4, 3, 4, 22, 5, 4, 45, 6565, 453]
        2
        [3, 4, 4, 4, 22, 5, 453, 45, 6565]

    heappop()实际也就相当于删除最小的元素了。

堆数据结构最重要的特征是 heap[0] 永远是最小的元素。并且剩余的元素可以很
容易的通过调用 heapq.heappop() 方法得到,该方法会先将第一个元素弹出来,然后
用下一个最小的元素来取代被弹出元素 (这种操作时间复杂度仅仅是 O(log N), N 是
堆大小)。

要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很
合适的。如果你仅仅想查找唯一的最小或最大 (N=1) 的元素的话,那么使用 min() 和
max() 函数会更快些。类似的,如果 N 的大小和集合大小接近的时候,通常先排序这
个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[-
N:] )。需要在正确场合使用函数 nlargest() 和 nsmallest() 才能发挥它们的优势 (如果
N 快接近集合大小了,那么使用排序操作会更好些)。



<p id='q'>位置参数和关键字参数</p>



ifelse的表达式写法:
c = a if a>b else b
如果a>b,则执行c = a ,否则执行c= b
ifelse二维列表写法:
c = [b,a][a>b]

    >>> a = 10
    >>> b = 9
    >>> c =[a,b][a>b]
    >>> c
    9
    >>> c = [b,a][a>b]
    >>> c
    10
    >>> c = [b,a][b>a]
    >>> c
    9
    >>> 
    后面的成立的时候,输出的是前以列表中的后面的值。不成立则是输出的前一列表的第一个元素。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容