Python学习(一)

来源:互联网 发布:医学搜题软件 编辑:程序博客网 时间:2024/05/09 18:31

参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

一、基础

1、数据类型

整型、浮点型、字符串、布尔值、空值、变量、常量。

Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647

Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。

2、字符串和编码

为什么字母占一个字节,而一个汉字确占两个字节?

中国字比较多,1字节=8位,8位从0000 0000到1111 1111只能表示256个字符,2个字节是2*8=16位,从0000 0000 0000 0000到1111 1111 1111 1111可以表示65535个字符。6万多个足以表示我们经常用的那些字了。所以我们用2字节表示汉字。

操作字符串常用函数:

len(xxx):计算xxx的字符长度;

split():按列表输出字符串中的单词(可用字典diclk统计字母出现的次数)

def vcDic(s):return {x : x.count('a') + x.count('e') + x.count('i') + x.count('o') + x.count('u') for x in s.split()}a = "many of you failed to insert your hawid"print (vcDic(a))
格式化:

在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

>>> 'Hello, %s' % 'world''Hello, world'>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'


3、列表list、元组tuple、字典dict

list:list是一个是一个可变的有序表,是Python内置的一种数据类型,可以随时添加(append)、删除(pop()通过下标删除)、替换(replace)其中的元素。

tuple:tuple一旦初始化便不能修改,在定义时,tuple的元素就被确定了。

dick:Python内置了字典,使用key-value存储,具有极快的查找速度。和list相比,查找速度要高很多。为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

Dict和List的区别:Dict的查找速度和插入速度都是极快的,不会随着key的增加而增加;但dict要占用大量的内存,内存浪费多。

Dict是不可变对象,因为使用key来计算value的存储位置,为了保证结果的正确性,作为key的对象不能变,可使用字符串、整数等不可变的对象作为dict中的key。

Set:set和dict类似,也是一组key的集合,但是不同的是在set中没有重复的key。

4、函数

sorted:python排序的内置函数。

对数字(默认升序)进行排序:

>>> sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)[5, 9, -12, -21, 36]

对字符串进行排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

>>> sorted(['bob', 'about', 'Zoo', 'Credit'])['Credit', 'Zoo', 'about', 'bob']

简单练习:

def by_name(t):return t[0]def by_score(t):return t[1]L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]print (sorted(L, key = by_name))print (sorted(L, key = by_score, reverse=True)) # reverse = True 降序


题目练习:

1、统计红楼梦每个字符的个数:

f = open('hlm-new.txt','r', encoding='utf-8')d = {}for line in f:    for key in line:        if d.get(key, 0) == False:            d[key] = 1        else:            d[key] += 1a = sorted(d.items(), key=lambda dd:dd[1], reverse = True)for aa in a:    print (aa)
2、随机取3个数,n > x > y > z >= 0,并去除重复元组

def allTriples(a):return ([(x , y , z) for x in range(0,a) for y in range(0,x) for z in range(0,y)])print (tuple(allTriples(5)))

3、统计一个字符串中每个单词的元音个数

def vcDic(s):return {x : x.count('a') + x.count('e') + x.count('i') + x.count('o') + x.count('u') for x in s.split()}a = "many of you failed to insert your hawid"print (vcDic(a))
4、汉诺塔

def move(n, a, b, c):if n == 1:print (a, '-->', c)else:move(n - 1, a, c, b)move(1, a, b, c)move(n - 1, b, a, c)move(2, 'A', 'B', 'C')

5、杨辉三角

def triangles():    yield [1]    l = [1, 1]    yield l    while True:        l = [1]+[l[n]+l[n+1] for n in range(len(l)-1)]+[1]        yield ln = 0for t in triangles():    print(t)    n = n + 1    if n == 10:        break


原创粉丝点击