这一章是列表和字典的笔记,下一章是元组和集合的笔记。

列表[ ]

列表是一个“大容器”可以存储N多个元素,程序可以方便地对这些数据进行整体操作。列表相当于其他语言中的数组。
图片说明
创建方式:1使用[] 2 调用函数list

lst=['hello','world',98]
lst2= list(['hello','world',99])

列表的索引是面向对象的,其结构如图所示:
图片说明

✪列表的特点:
1.列表元素有序排列
2.索引映射唯一一个数据
3.列表可以重复存储一个数据
4.任意数据类型混存
5.根据需要动态分配和回收内存

字典{ }

字典是Python内置的数据结构之一,与列表一样是一个可变的序列。以键值对的方式存储,字典是一个无序的序列。要求key是一个不可变的序列,根据哈希函数,计算出该键值存储的位置。
图片说明

创建方式:1.使用{} 2.使用dict()

scores = {'张三':100,'李四':98,'王五':45}
print(scores)
print(type(scores))

student =dict(name='jack',age=20)
print(student)

d={}
print(d)

✪字典的特点:
1.字典中的所有元素都是一个key-value对,key不允许重复,value可以重复。
2.字典中的元素可以是无序的。
3.字典中的key必须是不可变对象。
4.字典也可以根据需要动态地伸缩。
5.字典是一种使用空间换时间的数据结构,会浪费较大的内存。

列表元素的索引: lst.index()

1.根据元素的值,获取单个元素的索引

lst=['hello','world',98,'hello']       
print(lst.index('hello')) #如果列表中相同元素,只返回列表中相同元素第一个元素的索引
 #print(lst.index('Python'))       ValueError: 'Python' is not in list
print(lst.index('world',1,3))   #在范围内查找

2.获取列表的单个元素 正向索引,逆向索引

lst=['hello','world',98,'hi','word',92]
print(lst[1])         #正向索引,获取索引为1的元素——world
print(lst[-4])            #逆向索引,获取索引为-4的元素——98
#     print(lst[10])   #IndexError: list index out of range

3.使用切片操作获取列表中的多个元素
切片范围:[start,stop)前闭后开的区间,切片之后获得一个新的列表,因为id值不同。

lst3= list([0,1,2,3,4,5,6,7,8,9])
print('原列表的id',id(lst3))
print('切片列表的id',id(lst3[1:6:1]))
print(lst3[1:6:1])  #start:1    stop:6    step: 1

start、stop、 step有默认值。
当step为正数时,切片的第一个元素默认为列表的第一个元素,切片的最后一个元素为列表的最后一个元素。
当step为负数时,切片的第一个元素默认为列表最后一个元素,切片的最后一个元素默认为列表的第一个元素。

lst3= list([0,1,2,3,4,5,6,7,8,9])
print(lst3[:6:2])
print(lst3[::2])
print(lst3[::])
print(lst3[1::2])
print('步长是负数的情况')
print(lst3[::-1])     #倒着排列
print(lst3[7::-1])
print(lst3[9:0:-2])

列表元素的查询操作

1.判断指定元素是否在列表中存在:

print('p'in 'python')      #True
print('k'in 'python')      #False
lst=[10,20,'Python','hello']
print(10 in lst)           #True
print(100 in lst)          #False

2列表元素的遍历

for item in lst:
    print(item)       #对列表里面的内容依次进行输出

print(lst)            #两种输出的方式是不一样的哦

列表元素的增、删、改操作

1.四种方法向列表中增加元素
①append()在末尾添加一个元素,append()里面的元素也可以是一个链表

lst=[10,20,'Python','hello']
lst2= list(['hello','world',99])
print('添加元素之前',lst,id(lst))
lst.append(100)             
print('第一次添加元素之后',lst,id(lst))

lst.append(lst2)
print('第二次添加元素之后',lst,id(lst))  

结果为:
添加元素之前 [10, 20, 'Python', 'hello'] 2279505916160
第一次添加元素之后 [10, 20, 'Python', 'hello', 100] 2279505916160
第二次添加元素之后 [10, 20, 'Python', 'hello', 100, ['hello', 'world', 99]] 2279505916160

②extend()在列表的末尾至少添加一个元素

lst=[10,20,'Python','hello']             
lst2= list(['hello','world',99])
lst.extend(lst2)
print('第三次添加元素之后',lst,id(lst))              

结果为:
第三次添加元素之后 [10, 20, 'Python', 'hello', 'hello', 'world', 99] 2443520110848

③insert()在列表任意位置添加一个元素

lst=[10,20,'Python','hello']
lst.insert(1,90)
print('第四次添加元素之后',lst,id(lst))        #insert()在在1的位置添加90

结果为:
第四次添加元素之后 [10, 90, 20, 'Python', 'hello'] 1952250720448

④切片操作,在列表的任意位置添加至少一个元素

lst3= list([0,1,2,3,4,5,6,7,8,9])
lst=[10,20,'Python','hello']
print('lst3:',lst3)
lst[1:2]=lst3                   #切片操作:lst 1,2,3的位置被切掉换成lst3
print(lst)

结果为:
lst3: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'hello']

2.五种方法列表删除元素的操作
①remove()一次移除一个元素,如果没有这个会报错

lst=[10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 99, 'hello', 'hello', 'world', 99]
lst.remove(99)        #remove()从列表移除一个元素,如果有重复元素只移除一个
print(lst)

②pop()将索引为1的位置移除,如果不指定参数默认最后一个,如果没有,会报错

lst=[10,20,30,40,50,60,30]
lst.pop(1)                                                    
print(lst)
lst.pop()
print(lst)

③切片,一次至少删除一个元素,将产生一个新的列表对象有两种操作方式

lst=[20,30,40,50,60]
new_lst=lst[1:3]
print('原来的列表',lst,id(lst))                    #切片至少删除一个元素,
print('新来的列表',new_lst,id(new_lst))                 #有一点像剪纸建模型的操作
lst[1:3]=[]
print('"剪窗花"的列表',lst,id(lst))

结果为:
原来的列表 [20, 30, 40, 50, 60] 1834526044416
新来的列表 [30, 40] 1834526044800
"剪窗花"的列表 [20, 50, 60] 2246257144000

④clear()清除列表中的所有元素

lst.clear()
print(lst)

⑤del将列表对象都删除

del lst           #del直接删除,打印都都打不出来,因为没有定义
del lst2
del lst3

3.列表元素修改操作

lst=[10,20,30,40,50]
lst[2]=100
print(lst)  #[10, 20, 100, 40, 50]

lst[1:3]=[100,200,300,400]
print(lst)  #[10, 100, 200, 300, 400, 40, 50]

列表的排序操作

指定函数关键字,可以实现升序或降序排序
①sort(),原列表的基础上进行,指定函数关键字,可以实现升序或降序排序

lst = [10, 100, 200, 300, 400, 40, 50]
print('排序前的内容',lst,id(lst))
lst.sort()                           #sort()升序排列,在原列表的基础上进行的
print('升排序后的内容',lst,id(lst))

lst.sort(reverse=True)              #sort(reverse=True)就是降序排序
print('降序排序后的内容',lst,id(lst))

②sorted(),产生一个新的列表对象,指定函数关键字,可以实现升序或降序排序

lst = [10, 100, 200, 300, 400, 40, 50]
print('原列表',lst)
new_lst = sorted(lst)
print(lst,id(lst))
print(new_lst,id(new_lst))   #id明显不一样

desc_lst = sorted(lst,reverse=True)
print(desc_lst,id(desc_lst))

列表生成式

要求列表中的元素有一定的规则。

lst2=[i*i for i in range(1,10)]
   #[表示列表元素的表达式   for  自定义变量   in    range()]
print(lst2)

获取字典中的元素

1.两种方法获取字典中的value:第一种:使用[ ],第二种:使用.get() 更好

scores = {'张三':100,'李四':98,'王五':45}
print(scores['张三'])               #100          
#print(scores['陈留'])                  #错误:KeyError: '陈留'

print(scores.get('张三',))                #100     
print(scores.get('陈留'))              #None
print(scores.get('陈留','不存在'))           #返回 不存在

2.key的判断

scores = {'张三':100,'李四':98,'王五':45}
print('张三'in scores) #True
print('张三'not in scores) #False

字典的删、增、该操作

①del 删除指定的key-value对,clear()清空所有元素

scores = {'张三':100,'李四':98,'王五':45}
del scores['张三']              #{'李四': 98, '王五': 45}
print(scores)
scores.clear()                  #{}

②字典元素的新增操作,
字典是无序的,所以不需要指定位置,哈希函数会根据key值,选定一个位置。

scores = {'张三':100,'李四':98,'王五':45}
scores['陈留']=100  #新增元素
print(scores)

字典的视图

①keys()---->获取字典中所有的key

scores = {'张三':100,'李四':98,'王五':45}
keys = scores.keys()
print(keys)           #dict_keys(['张三', '李四', '王五'])
print(type(keys))     #<class 'dict_keys'>
print(list(keys))     #将所有的key组成的视图转化为列表:['张三', '李四', '王五']

②values()---->获取字典中所有的value

scores = {'张三':100,'李四':98,'王五':45}
values = scores.values()
print(values)            #dict_values([100, 98, 45])
print(type(values))      #<class 'dict_values'>
print(list(values))      #将所有的values组成的视图转化为列表:[100, 98, 45]

③items()----->获取字典中所有的key.value对

scores = {'张三':100,'李四':98,'王五':45}
items = scores.items()
print(items)            #dict_items([('张三', 100), ('李四', 98), ('王五', 45)])
print(type(items))      #<class 'dict_items'>
print(list(items))    #将所有的items(元组)组成的视图转化为列表:[('张三', 100), ('李四', 98), ('王五', 45)]

字典元素的遍历

参考“获取字典中的值”给的两种方法。

scores = {'张三':100,'李四':98,'王五':45}
for item in scores:
    print(item,scores[item],scores.get(item))

结果为:
张三 100 100
李四 98 98
王五 45 45

字典生成式

zip(),将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回这些元组组成的列表,生成一个字典

items = ['Fruits','Books','Others']
prices = [96,78,85,100,120]

d={item:prices     for item,prices in zip(items,prices)}
print(d)

结果为:{'Fruits': 96, 'Books': 78, 'Others': 85}
如果元素不相同,打包时以元素短的那个来生成