head first python第五章

该章为数据处理章节,主要介绍了集合类型list与set
包括列别推导式,序列操作符切片[:],sorted与list.sort区别等

一 列表推导式:

用于操作遍历集合对象的值。返回一个新的集合类型。原来的数据未发生改变

[expr for value in collection ifcondition]

如下示例:l_a的值并没有发生改变,他返回一个值。

>>> l_a=[1,2,3,4,5,6]
>>> [s+1 for s in l_a]
[2, 3, 4, 5, 6, 7]
>>> print(l_a)
[1, 2, 3, 4, 5, 6]
>>> 

如果要改变原来对象,需给原有变量赋值

>>> l_a=[s+1 for s in l_a]
>>> print(l_a)
[2, 3, 4, 5, 6, 7]

二 序列类型操作符

1.成员关系操作符
用于判断一个元素是否属于一个序列。

对象 [not] in 序列
>>> l_a=[1,2,3,4,5,6]
>>> 1 in l_a
True
>>> 9 in l_a
False
>>> 9 not in l_a
True
>>> 

以上为用法,只是要告别find了。。。

2.连接操作符
(+)
不推荐使用,这个操作不是最快或者说最有效的。
对字符串来说,这个操作不如把所有字符串放到一个列别或可迭代对象种,然后调用一个join方法 节约内存;

join(...)
    S.join(iterable) -> str

    Return a string which is the concatenation of the strings in the
    iterable.  The separator between elements is S.
Help on method_descriptor:

extend(...)
    L.extend(iterable) -> None -- extend list by appending elements from the iterable

类似的,对于列表来说,推荐用extend()方法把两个或多个列表对象合并。
当需要把两个对象简单相加时采用
核心编程中的例子已然当掉了
3.5 range返回的是一个range对象不再是一个list

Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    for i in [None] +range(-1,-len(s),-1) :
TypeError: can only concatenate list (not "range") to list
>>> 

于是乎~~~~

3.重复操作符

sequence* copies_int
>>> st=s*8
>>> print(st)
abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde

返回一个重复了 copies_int的新序列

4.切片操作符

>>> list_a=[1,2,3,4,5,6,7]
>>> list_a[0:3]
>>> list_a[0:6:2]
[1, 3, 5]
>>> list_a[0:2:2]
[1]
>>> list_a[0:2:2]

>>> list_a[:-1] #这里感觉好666
[1, 2, 3, 4, 5, 6]
>>> list_a[:-2]
[1, 2, 3, 4, 5]
>>> 

5.用步长索引进行扩展的切片操作

>>> list_a[::-1] #翻转操作
[7, 6, 5, 4, 3, 2, 1]
>>> list_a[::2] #隔一个取一个的操作
[1, 3, 5, 7]

6.切片索引的更多内容
切片索引不会out_of_range

每次把最后一个砍掉

>>> for i in range(-1,-len(list_a),-1):
    print(list_a[:i])
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]

核心编程第二版里面介绍的p105 页 [None]+range(-1,-len(s),-1):
已经不好使了。因为range返回range对象,不是list了~~~

三 去掉list中重复的值

>>> list_a.append(6)
>>> list_a
[1, 2, 3, 4, 5, 6, 7, 6]
>>> set_a=set(list_a)
>>> set_a
{1, 2, 3, 4, 5, 6, 7}
>>> list_a
[1, 2, 3, 4, 5, 6, 7, 

恩,好简单~
原来的list_a 并没有改变

四 sorted与list.sort()的区别
sorted非原址排序 list.sort()原址排序
里面有个很重要的地方是 list.sort的返回值为None~

sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

五 本章源码

import os
os.chdir('D:\python\hfpy_ch5_data')

def GetFileDate(filename):
    try:
        with open(filename,'r') as data_file:
            data=data_file.readline()
            return data.strip('\n').split(',')
    except IOError as err:
        print(str(err))
        return None

def sanitize(each_data):
    if '-' in each_data:
        (min,sec)=each_data.split('-')
        print(each_data)
        return (min+':'+sec)
    if '.' in each_data:
        print(each_data)
        (min,sec)=each_data.split('.')
        return (min+':'+sec)
    if ':' in each_data:
        return each_data

james_data= GetFileDate('james.txt')
list_james=sorted(set([sanitize(s) for s in james_data]))[0:3]
print(list_james)

print(james_data)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值