【笔记】Python入门(慕课)

一、Python变量和数据类型

1. print 'a', 'b', 'c' 三个字符串连成一串输出。print遇到逗号则输出空格。

2. 字符串前加上r,如r'\(~_~)/ \(~_~)/',则字符串内的字符不需要转义。但不能表示多行字符串和带有'与"的字符串。
    用'''string'''可以表示多行字符串和带有引号的字符串(相当于字符串原样输出,不需要添加转义字符)。
    
3. 以Unicode表示的字符串(如中文字符)前必须加上u,其他方面和普通字符串一样,比如第2条的方面。如u'中文\n日文\n韩文',ur'''中文"日文"韩文'''
    如果中文字符串在Python环境下遇到UnicodeDecodeError,这是因为.py文件保存的格式有问题,可以在第一行添加注释# -*- coding:utf-8 -*-,目的是告诉编译器用utf-8编码读取源代码,然后用Nodepad++另存为以utf-8格式保存。
    
4. 0、空字符串''和None为False,其他数值和非空字符串为True。

二、List和Tuple类型

1. Python内置数据类型为列表list,list是一个有序集合,也就是其中的元素是按照顺序排列的。例子L = ['Lisa', 95, 'John', 80, 'Alice', '60']
    L[-1]表示倒数第一个元素。
    
2. list添加新元素。L = ['A', 'B', 'C']
    L.append('D') #把新元素追加到list末尾
    L.insert(0, '#') #把新元素添加到索引位置,原本此位置及后面的元素依次顺移一位
    
3. L.pop()删除list最后的一个元素,并返回这个元素(输出此元素)
    L.pop(2)删除第三个元素
    
4. 对一个索引赋值可以直接替换此元素。

5. tuple是另一种有序列表,但是一旦创建就不能修改。t = ('A', 'B', 'C'),没有增加修改删除的方式,查询方式与list相同。

6. 创建单元素tuple,t = (1,)需要加一个额外的逗号,否则会产生歧义,输出数字1,因为括号也可以是数学符号。同样Python输出单元素tuple也会自动加一个逗号。

7. tuple内容不变是指tuple元素的指向永远不变,但如果指向一个list,tuple元素的指向仍不变,但list元素的指向可变,则变成了一个内容“可变”的tuple。

三、条件判断和循环

1. 同样的缩进代表一个代码块,使用四个空格缩进。如果在Python交互模式下,要退出缩进还要多加一个回车。

2. if例子
if age >= 18: #有一个冒号
    print 'your age is', 18
    print 'adult'
print 'END'

if-else例子:
if age >= 18:
    print 'adult'
else:
    print 'teenager'
    
if-elseif例子
if age >= 18:
    print 'adult'
elif age >= 6:
    print 'teenager'
elif age >= 3:
    print 'kid'
else:
    print 'baby'
    
3. for循环
for name in L:
    print name # name变量是在for循环中定义的。依次取出list中的元素,赋值给name,然后执行for循环体。
    
4. while循环
while x < 100:
    sum += x
    x = x + 1
print sum

5. break
while True:
    sum += x
    x = x + 1
    n = n + 1
    if n > 20:
        break
print sum

四、dict和set类型

1. dict 键值对应,类似json。{}代表一个dict

1)
    d = {
        'Adam': 95,
        'Paul': 80,
        'Me': 100
    }
    len(d) # ==>3
    len()函数可以计算任意集合的大小。

2)使用d[key]查找对应的value。
    例子:
    if 'Paul' in d: #先检查dict中是否有'Paul',防止报错。
        print d[Paul]

    print d.get['Paul'] #==> d['Paul']
    print d.get('bucunzaidekey') #==> None

3)在一个dict中,key不能重复。
    key-value的序对没有顺序,打印时不一定是创建时的顺序。
    作为key的元素必须不可变,因此不能用list作为key。value是否可变无所谓。

4)更新dict
    d['Paul'] = 72 #key不存在则添加,存在则替换。

5)遍历dict
    for key in d:
        print key+':',d[key]
    
2. set持有一系列不重复的元素,相当于一个无序的list

1)创建set
    s = set(['A', 'B', 'C'])
    print s #==> set(['A', 'C', 'B'])
    如传入包含相同元素的list,则自动去重
    s = set(['A', 'B', 'C', 'C'])
    print s #==> set(['A', 'C', 'B'])
    print len(s) #==> 3

2)访问set
    set是一个无序集合,所以不能用索引访问。访问set相当于判断一个元素是否在set中。
    'A' in s #==> True
    
3)set的特点
    set储存的元素必须是不变对象。
    set储存的元素是没有顺序的。
    使用例子:
    weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
    if x in weekdays:
        print 'input ok'
    else:
        print 'input error'

4)遍历set
for name in s:
    print name
    
5)更新set
    s.add('Paul') #==> 重复不会报错
    s.remove('Paul') #==> 若试图删除不存在的元素,则报错。以此remove前需要先判断。
    L = ...
    s = ...
    for x in L:
        if x in s:
            s.remove(x)
        else:
            s.add(x)

五、函数

1. 定义函数
    def square_of_sum (L):
        sum = 0
        for x in L:
            sum += x*x
        return sum

2. 函数可以返回多个值 return x,y
    返回的实际上是一个tuple,若x, y = func () tuple可以自动将值依次赋值给变量。
    
3. 传入默认参数
def greet(str='world')
    print 'hello,',str+'.'
greet()
greet('Paul')

4. 定义可变参数
def average(*args)
    return float(sum(args)) and float(sum(args))/len(args)
args是一个tuple。

六、切片

1. 对list进行切片
    L[0:3]从索引0开始取到索引3,不包括索引3。如果是从0开始,0可以省略,为L[:3]。
    L[:]表示从头取到尾,L[:]实际上复制出了一个新list。
    L[::2],第三个参数表示每N个取一个,如例为每两个元素取一个。
    把list换成tuple,切片操作完全相同,只是切片结果也变成了tuple。
    
2. 倒序切片
    L[-2:]从倒数第二个元素取到末尾。
    L[:-2]从头取到倒数第二个元素。
    L[-3:-1]从倒数第三个元素取到倒数第一个元素。
    L[-4:-1:2]从倒数第四个元素取到倒数第一个元素,每两个取一个。
    print L[4::5][-10:] L[4::5]5的倍数的list,取倒数十个。
    
3. 对字符串切片
    字符串切片方式与list一样,每个字符相当于一个元素。
    
七、迭代

1. Python中,迭代永远是取出元素本身,而不是元素的索引。
    想要在for循环中取到索引,用enumerate()
    for index,name in enumerate(L):
        print index,'-',name
    使用enumerate()函数,可以在for循环中同时绑定索引index和元素name。
    实际上,enumerate()函数将['A', 'B', 'C', 'D']变成了[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')],因此,每个元素实际上是一个tuple。
    因此,索引迭代并不是真的按索引访问,而是有enumerate()函数将每个元素自动变成了(index, element)这样的tuple,再迭代,就获得了索引与元素本身。
    
2. zip()将两个list合并为一个list,zip([1, 2, 3], ['A', 'B', 'C']) ==> [(1, 'A'), (2, 'B'), (3, 'C')]
    range(a, b) 一个从a到b的数字list,range(a, b, 2)生成一个每两个数字显示一个的数字list。

3. 迭代dict的value
    1)dict对象有一个values()方法,可以将dict转换为一个包含所有value的list。
    d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
    print d.values()
    2)dict对象还有一个itervalues()方法,不是讲dict转换为list,而是在迭代过程中依次从dict中取出value,节省生成list所需要的内存。
    
4. 迭代dict的key和value
    1)items()方法将dict转换为包含tuple的list
    >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
    >>> print d.items()
    [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
    对此进行迭代,可以同时获得key和value
    for key,value in d.items()
        print key, ':', value
    2)同样,items()也有一个对应的方法iteritems(),不把dict转换为list,而是在迭代过程中不断给出tuple,不占用额外内存。
    
八、列表生成式
1. [x*x for x in range(1, 10)] 生成一个[1*1, 2*2, ...10*10]的列表。

2. 复杂表达式
    ['<tr><td>%s</td><td>%s</td></tr>' %(name, score) for name,score in d.iteritems()]
    print '<table>'
    print '<tr><th>Name</th><th>Score</th></tr>'
    print '\n'.join(tds)
    print '</table>'
    字符串可以通过%进行格式化,用指定的参数替代%s,如果是直接传递参数之类不是添加到字符串中则不需要这样。
    字符串的join()方法可以把一个list拼接成一个字符串,用点号前面的内容分隔。
    
3. 条件过滤
    [x*x for x in range(1, 11) if x%2 == 0] 在for循环后还可以加上if来进行筛选。
    
4. 多层表达式
    for循环可以嵌套,因此在列表生成式中,也可以用多层for循环来生成列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值