Skip to content

Latest commit

 

History

History
290 lines (186 loc) · 5.39 KB

第二章.md

File metadata and controls

290 lines (186 loc) · 5.39 KB

目录


list

Python内置的数据类型列表:list
有序的,可随时添加删除其中元素

a = ['1','r','ppt']

用len()函数可以获得list元素个数:

len(a)

用索引来访问list中每元素,索引从0开始:

a[2]

索引超出了范围时,Python会报一个IndexError错误,不要越界,确保最后一个索引是:

len(a) - 1

可以用-1做索引,直接获取最后一个元素:

a[-1]

末尾追加

a.append('word')

元素插入指定位置1处:

a.insert(1,'nsi')

删除list末尾的元素

a.pop()

删除指定位置2处的元素:

a.pop(2)

将某个元素替换别的元素:

a[1] = b

list元素的数据类型也可以不同:

a = ['a' , 90 , True]

list中的list:

>>> a = ['b' , ['d' , 1 , False] , 89]
>>> a[1][2]
False

啥?上面 a 变量有多少个元素呢? 3个

空list,长度为 0 :

a = []


tuple

tuple元组,和list很类似,但是:

  • tuple一旦初始化就不能修改
  • 没有 append()insert(),没有修改,但是可以获取查询元素

t = (1 , 2 , 'rt')

tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple

只有1个元素的tuple定义时必须加一个逗号 ,:

t = (8,)

list与tuple嵌入使用:

>>> t = ['o' , 'p' , ('A', 1 ,Ture) , 2016]
>>> t[1]  
p
t[2][0]  
A

条件判断

if 9 < 5:
    print('?')
elif 0 <-1 :
    print('??')
elseprint('!')

*注意冒号 :
*注意缩进

只要条件变量是非零数值、非空字符串、非空list等,就判断为True,否则为False:

# i 未定义,在这里为False
if i:
    print('?')
elseprint('!')

再说下input输入,input输入的所有内容都是 str 类型!!

ir = input('输入整数:') if ir > 20: # 错误,不能比较,因为ir变量是 str 类型 print('?') else: print('??')

循环

for .. in ... 循环

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)

Python内置的 range() 函数,可以生成一个整数序列:

>>> range(5)
[0,1,2,3,4]

while 循环

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

break跳出

break 语句可以提前退出循环

continue跳出

continue 语句跳过当前的这次循环

dict

字典(dict),全称:dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

>>> student = {"张三" : 90 , "李四" : 84, "王五" : 96 }
>>> student['李四']
84

为什么dict查找速度这么快?

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

添加数据到dict:

student['赵六'] = 98

对同一key赋值,后面的值覆盖前面的值

避免key不存在dict就会报错:

  • 通过in判断key是否存在
    • '老二' in student
  • 通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
    >>> student.get('老二')
    None
    >>> student.get('老二'-1)
    -1

删除dict:

student.pop('赵六')

和list比较,dict有以下几个特点:

  • 查找和插入的速度极快,不会随着key的增加而变慢;
  • 需要占用大量的内存,内存浪费多。

而list相反:

  • 查找和插入的时间随着元素的增加而增加;
  • 占用空间小,浪费内存很少。

dict的key必须是不可变对象

因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key


set

set和dict类似,是一组key的集合,不存储value。
由于key不能重复,所以,在set中,没有重复的key。

set 的创建,必须提供一个list作为输入集合:

s = set([1,2,3])
>>> s
{1,2,3}

set 的添加

s.add(4)

set 的删除

s.remove(2)

set 可以做交集与并集

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

list是有序的,可变对象,str 是不变对象,dict是无序的

总结:

list

a = [1,Ture,2016,'畜生']

tuple

b =(1,2,3,False)

dict

c = {"张三" : 90 , "李四" : 84, "王五" : 96 }

set

d =set([1,Ture,2016,'畜生']) -> d = {1,Ture,2016,'畜生'}

注意括号