一.列表
列表:列表是由一系列按照特定顺序排列的元素组合。列表相当于一个容器,里面可以存储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'>
总结:单个元素的元组必须添加一个","号,否则不是元组。(对象)-->该对象原来是什么数据类型,它就是什么数据类型。