DAY4 Python数据类型之列表
一.列表
列表:列表是由一系列按照特定顺序排列的元素组合。列表相当于一个容器,里面可以存储python的任意数据类型,在别的语言中又称为数组。
一. 创建列表
li = ['python',100,'java','c++'] str_list = ['c'*3] ----> ['c','c','c'] #谨记:是把字符串变成三个,而不是"ccc" str_list = [['c'] * 3] ----> [['c','c','c']] #谨记:列表*3,是把列表中的元素重复三遍
二.索引,切片,步长
(1)索引
# 在列表中,根据索引访问到的元素,本来是什么类型就是什么类型。
li = ['python',100,'java','c++'] print(li[0],type(li[0])) >>>'python',str print(li[1],type(li[1])) >>>100,int
(2)切片
# 列表的切片得到的还是一个列表
li = ['python',100,'java','c++'] print(li[0:3]) >>>['python', 100, 'java']
(3)切片+步长(也可以反向步长)
li = ['python',100,'java','c++'] print(li[::-1]) >>>['c++', 'java', 100, 'python']
三.列表的增删改查
#增
append():追加到列表的最后
insert(index,value):插入,把元素插入到对应位置
extend():把序列的元素分别添加到列表中
#append():追加 l1 = ['alex','wusir','taibai'] l1.append('egon') # 追加元素 l1.append([1,2,3]) # 追加列表 print(l1)
'''insert(index,value):插入,把元素插入到对应位置'''
l1 = ['alex','wusir','taibai']
l1.insert(1,'宝元')
print(l1)
'''extend()'''
# l1 = ['alex','wusir','taibai']
# l1.extend('abc')
>>>['alex','wusir','taibai','a','b','c']
# l1.extend([111,222,333])
# print(l1)
# 删
pop(index):事先知道元素对应的索引值,根据索引值来删除对应的元素,并且会返回该元素,方便后续使用。
remove():事先知道元素的名称,根据元素名称来删除。
clear():清空列表的元素,但保留列表本身
del语句: 1.按照索引值来删除元素(与pop不同的是不可以返回元素)
2.可以按照切片来删除元素
3.可以在内存级别删除整个列表
'''pop():按照索引删除,并把删除的元素返回,方便以后使用''' l1 = ['alex','wusir','taibai'] pop_item = l1.pop(0) print(l1) print(pop_item) '''remove():知道元素名称,按照名称删除''' l1 = ['alex','wusir','taibai'] l1.remove('alex') print(l1) '''clear():清空列表内容,保留列表本身''' l1 = ['alex','wusir','taibai'] l1.clear() print(l1) '''del # 1.可以按照索引删除 # 2.可以按照切片删除 # 3.可以在内存级别删除整个列表 # ''' l1 = ['alex','wusir','taibai'] del l1 # 内存级别删除 del l1[0] #按照索引删除 del l1[0:3] #按照切片删除
#改
'''
1.按照索引去修改
2.按照切片去修改
'''
# l1 = ['alex','wusir','taibai'] '''按照索引去修改值''' # l1[2] = '男神' #l1[2]在等号左边表示索引位置 '''按照切片去修改''' # l1[0:2] = '老男孩' #先把切片内容清空,再把后续内容迭代加入 # print(l1) '''按照切片+步长修改:删除几个元素只能添加几个元素'''
#查
(1)按照索引,切片查找
(2)for循环查询
''' # l1 = ['alex','wusir','taibai'] # for i in l1: # print(i)
# 其他方法
'''
count()
len()
index()
sort():用于排序
reverse():翻转列表
'''
一般用于纯数字的列表排序 l2 = [5,3,6,2,4,7] l2.sort() #从小到大排序 l2.sort(reverse=True) #从大到小排序 print(l2) l2 = [5,3,6,2,4,7] l2.reverse() print(l2)
三.列表的嵌套
l3 = ['alex', 'wusir', ['taibai',99,'ritian'], 20] # 1, 找到alex的e元素。 # 2, 将wusir变成大写。 # 3, 给此列表['taibai',99,'ritian'] 追加一个元素,'文周' # 4,将 'taibai' 首字母大写 # 5,将 99 通过数字加1 的方式变成100,并放回原处。 '''找到alex的e元素。''' # print(l3[0][2]) '''将wusir变成大写。''' # l3[1]=l3[1].upper() # print(l3) '''给此列表['taibai',99,'ritian'] 追加一个元素,'文周''' # l3[2].append('文周') # print(l3) '''将 'taibai' 首字母大写''' # value = l3[2][0].capitalize() # print(value) '''将 99 通过数字加1 的方式变成100,并放回原处。'''
四.知识点补充
知识点一:列表相加,通过'+'。
lst1 = [1,2,3] lst2 = ['he','hesihao'] lst3 = lst1 + lst2 print(lst3) >>> [1, 2, 3, 'he', 'hesihao']
知识点二:题目:li=[11,22,33,44,55,66,77],将列表中索引为奇数的元素,全部删除
# 大多数人正常的想法,如下: l1 = [11,22,33,44,55,66,77] for i in range(len(l1)): if i % 2 == 1: l1.pop(i) print(l1) >>>IndexError: pop index out of range
---明明逻辑没有问题呀,怎么会报错,当你百思不得其解之时,你想到了debug这个功能~---
---通过debug,可以清楚的发现,就在你循环中删除元素时,列表中的元素的索引也在悄悄改变向前+1,嘿嘿-
所以请谨记:循环一个列表的时候,如果对元素进行删除,列表中元素的索引值也会在发生变化
方法一:定义一个新的列表,把符合的元素添加到新列表中,避免在原列表中进行操作。
l1 = [11,22,33,44,55,66,77]
l2 = []
for i in range(len(l1)):
if i % 2 ==0:
l2.append(l1[i])
l1 = l2
print(l1)
>>>
[11, 33, 55, 77]
方法二:观察后可以发现,从左向右删除,元素的索引会向前移,但是如果从右向左的话,
就避免了这个现象
l1 = [11,22,33,44,55,66,77]
for i in range(len(l1),-1,-1):
if i % 2 == 1:
l1.pop(i)
print(l1)
>>>
[11, 33, 55, 77]
方法三:通过切片+步长
del l1[1::2]
print l1
>>>
[11, 33, 55, 77]
元组:
元组是python中的一种基本数据类型,又称为只读列表。因为不可变,所以元组可以作为字典的key。
# 创建元组 tuple1 = (23,24) print(type(tuple1)) ip_port = ('192.168.1.1',8000) host = {} host['ip_port'] = ip_port print(host['ip_port'][0])
谨记:单个元素的元组,需要添加一个“,”号.
tu1 = ('str1') tu2 = ([1,2,3]) print(type(tu1)) print(type(tu2)) >>>
<class 'str'>
<class 'list'>
tu3 = ('str',) tu4 = ([1,2,3],) print(type(tu3)) print(type(tu4))
>>>
<class 'tuple'>
<class 'tuple'>
总结:单个元素的元组必须添加一个","号,否则不是元组。(对象)-->该对象原来是什么数据类型,它就是什么数据类型。