编程语言
首页 > 编程语言> > Python基础数据类型:列表【增删改查】,元组。range

Python基础数据类型:列表【增删改查】,元组。range

作者:互联网

1 知识大纲

2 主要内容

1.列表的初识
2.索引,切片,步长
li = [100, '太白', True, [1, 2, 3]]
# 索引 
列表索引,其在列表中是什么数据类型,取出来就是什么数据类型,如数字,字符串,列表...
print(li[0], type(li[0]))  #100 <class 'int'>
print(li[1],type(li[1]))   #太白 <class 'str'>                           
print(li[-1],type(li[-1])) #[1, 2, 3] <class 'list'>

# 切片 (顾头不顾腚)
列表切片,得到的都是列表类型的数据。

print(li[0:1]) #[100]
print(li[:2])   #[100, '太白']

相关练习题:

li = [1, 3, 2, "a", 4, "b", 5,"c"]
通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]
通过对li列表的切片形成新的列表l4,l4 = [3,"a","b"]
通过对li列表的切片形成新的列表l6,l6 = ["b","a",3]

li = [1, 3, 2, "a", 4, "b", 5,"c"]
l1 = li[0:3]
print(l1)
l2 = li[3:6]
print(l2)
l4 = li[1:6:2]
l4 = li[1:-2:2]
print(l4)
l6 = li[-3:0:-2]
print(l6)
3.列表的增删改查 【重点,记住】
# 列表的创建
# 方式一
l1 = []#创建空列表
l1 = [1, 2, 'Alex',True,[1, 2, 3]]   ###【填入的数据可以是int,bool,str,list类型】

# 方式二
l1 = list()   #创建空列表
print(l1)   #  []
# l1 = list(iterable)  # 可迭代对象
l1 = list('fhdsjkafhsdaf')  ###【填入的数据必须是可迭代的,如str,list。不能是int:TypeError: 'int' object is not iterable,bool:TypeError: 'bool' object is not iterable】
print(l1)    #['f', 'h', 'd', 's', 'j', 'k', 'a', 'f', 'h', 's', 'd', 'a', 'f']

# 方式三:列表推导式 
l1 = [i for i in range(1,5)]
print(l1)  # [1, 2, 3, 4]

# 增删改查
字符串的常用操作方法,不会对原字符串进行任何操作,都是产生一个新的字符串
 s1 = 'aafsfjgk'
 print(s1)  #aafsfjgk
 print(s1.upper())  #AAFSFJGK
 print(s1)   #aafsfjgk

列表的增删改查--->改变了原列表
l1 = ['hha','heihei','hehe']
print(l1)  #['hha', 'heihei', 'hehe']
l1.append('hhh')
print(l1)  #['hha', 'heihei', 'hehe', 'hhh']



# 增:

append
#追加,给列表的最后面追加一个元素  
l1 = ['太白', '女神', 'xiao','吴老师', '闫龙']
l1.append('xx')
print(l1.append('xx'))  # 不能打印它   #None
print(l1) 

# 举例:
l1 = ['太白', '女神', '吴老师', 'xiao', '闫龙']
while 1:
     name = input('请输入新员工姓名:(Q或者q退出程序)')
     if name.upper() == 'Q': break
     l1.append(name)
 print(l1)

insert 
#插入,在列表的任意位置插入元素  insert(index,object)
l1 = ['太白', '女神', 'xiao','吴老师', '闫龙']
l1.insert(2,'wusir')
print(l1)  #['太白', '女神', 'wusir', 'xiao', '吴老师', '闫龙']

extend 
#迭代着追加,在列表的最后面迭代着追加一组数据【把可迭代对象拆解为最小元素,如字符串'abcd'---->'a','b','c','d'  列表 ['alex', 1, 3] ---> 'alex', 1, 3 】
#extend后面括号里填入的数据必须是可迭代的,如str,list,不能是int,bool类型,会报错
l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
l1.extend('abcd')   
print(l1)   #['太白', '女神', 'xiao', '吴老师', '闫龙', 'a', 'b', 'c', 'd']

l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
l1.extend(['alex',])
print(l1)#['太白', '女神', 'xiao', '吴老师', '闫龙', 'alex']

l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
l1.extend(['alex', 1, 3])
print(l1)  #['太白', '女神', 'xiao', '吴老师', '闫龙', 'alex', 1, 3]


# 删

pop 
#按照索引位置删除,通过索引删除列表中对应的元素,该方法有返回值,返回值为删除的元素   
#pop(index)

l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
l1.pop(-2)  # 按照索引删除 (返回的是删除的元素)
print(l1.pop(-2))   #  xiao
print(l1)  #['太白', '女神', '闫龙']

l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
l1.pop()  # 默认删除最后一个
print(l1)   #['太白', '女神', 'xiao', '吴老师']


remove  
#指定元素删除,如果有重名元素,默认删除从左数第一个
#remove(object)

l1 = [ 'xiao','太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
l1.remove('xiao')
print(l1)  #['太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
 
    
clear清空 (了解)
l1 = [ 'xiao','太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
l1.clear()  #清空
print(l1)  #[]


del
#按照索引删除该元素
 l1 = [ 'xiao','太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
 del l1[0]  #['太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
 print(l1)

# 按照切片删除该元素
 l1 = [ 'xiao','太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
 del l1[0:2]
 # print(l1)  #['女神', 'xiao', '吴老师', '闫龙', 'xiao']

#按照切片(步长)删除该元素
 l1 = [ 'xiao','太白', '女神', 'xiao', '吴老师', '闫龙', 'xiao']
 del l1[0:5:2]
 print(l1)  #['太白', 'xiao', '闫龙', 'xiao']


# 改

#按照索引改值
l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
l1[0] = '男神'
print(l1)  #['男神', '女神', 'xiao', '吴老师', '闫龙']

l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
l1[2] = l1[2].upper()
print(l1)  #['太白', '女神', 'XIAO', '吴老师', '闫龙']

#按照切片改(迭代着增加)  【了解】 按照切片改,迭代着增加【把可迭代对象分解为最小元素】。按理说删除几个,增加几个。但是此处可以增加多个,删除元素的个数不用和增加元素的个数对应。
l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
l1[3:] = 'amgnrih'
print(l1)   #['太白', '女神', 'xiao', 'a', 'm', 'g', 'n', 'r', 'i', 'h']

#按照切片步长改(必须一一对应)  【了解】必须一 一对应,改几个位置,写几个元素,多了会报错。
 l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
 l1[::2] = 'amg'
 print(l1)   #['a', '女神', 'm', '吴老师', 'g']
 
 #自
 l1 = ['太白', '女神', 'xiao', '吴老师', '闫龙']
 l1[::2] = [1,2,[3,4]]
 print(l1) #[1, '女神', 2, '吴老师', [3, 4]]

 l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
 l1[::2] = 'abcd'    #必须一一对应,改几个位置,写几个元素,多了会报错。
 print(l1)   #报错



# 查:切片去查,或者循环去查。  索引,切片(步长)
l1 = [ '太白', '女神', 'xiao', '吴老师', '闫龙']
for i in l1:
     print(i)
 

循环列表,改变列表大小的问题
注意:在循环一个列表时的过程中,如果你要改变列表的大小(增加值,或者删除值),那么结果很可能会出错或者报错。因为某些元素的原索引值会改变
#应用实例:请把索引为奇数对应的元素删除 l1 = [11, 22, 33, 44, 55]  l1可以为任意一个列表,元素个数不定
    方法:直接删除  倒序删除 思维置换
#自己编写
#方法1:直接删除  按照切片步长删除
l1 = [11, 22, 33, 44, 55]
del l1[1::2]
print(l1)

#方法2:倒序删除
#从后往前倒着删除,不会改变前面元素的序号。分析知道:
# 如果列表中的元素个数为奇数n,要删除索引号为奇数(正奇数1,3,5,...)的元素,倒着删除,
# 每次删除一个元素,要从-2开始删除,删除后下一次要删除元素的索引号变为-3,再下一次变为-4,直到-(n+1)/2,这个数必须为整数int类型
# 因为range顾头不顾腚,所以其范围要多一位,即-(int((n+1)/2)+1)
# 如果列表中的元素个数为偶数n,要删除索引号为奇数(正奇数1,3,5,...)的元素,倒着删除,
# 每次删除一个元素,要从-1开始删除,删除后下一次要删除元素的索引号变为-2,再下一次变为-3,直到-n/2,这个数必须为整数int类型,
# 可以用-n//2,取一个负整数。因为range顾头不顾腚,所以其范围要多一位,即-(n//2+1)

l1 = [11, 22, 33, 44, 55]
if len(l1) % 2 == 1:
    for i in range(-2,-(int((len(l1) + 1)/2)+1),-1):
        l1.pop(i)
elif len(l1) % 2 == 0:
    for i in range(-1,-((len(l1) // 2)+1),-1):
        del l1[i]   #同l1.pop(i)
print(l1)

#方法3:思维置换
l1 = [11, 22, 33, 44, 55]
for i in range(0,len(l1)):
    if i % 2 == 1:
        l1[i] = ' '  #将所有索引号为奇数的元素修改为同一个元素,如空格' '
num = l1.count(' ')  #统计列表中空格的个数,决定了删除的次数
for i in range(0,num):
    l1.remove(' ')   #因为remove按指定元素删除,如果有重名元素,默认删除从左数第一个,所以要删除多次
print(l1)  #[11, 33, 55]

#################################################################
补充操作方法:

count(数)
#(方法统计某个元素在列表中出现的次数)。
a = ["q","w","q","r","t","y"]
print(a.count("q"))

index  注意:是某个值‘第一个’匹配项的索引
#(方法用于从列表中找出某个值第一个匹配项的索引位置)
a = ["q","w","r","t","y"]
print(a.index("r"))

########################注意############
#####1.
 li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc","TaiBai "]
 for i in li:
     j = li.index(i)  #从列表中找出某个值"第一个"匹配项的索引位,注意是第一个
     print(j)
#结果:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 0


#####2.
li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc","TaiBai "]
for i in li:
    j = li.index(i)  #从列表中找出某个值"第一个"匹配项的索引位,注意是第一个
    i = i.strip()    #将i两边空白去掉,再赋值给i,此时列表内的对应的元素不会修改
    li[j] = i       #对比发现,按照索引修改列表值的时候,重复出现元素的索引位改变成7了,不是上边的0了。此时列表内对应的元素才会修改成功
    print(j)
print(li)   #['TaiBai', 'alexC', 'AbC', 'egon', 'riTiAn', 'WuSir', 'aqc', 'TaiBai']   
# 结果:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
###############继续测试---->
个人总结:单纯查看j = li.index(i)的值得时候,得到的是列表中某个值"第一个"匹配项的索引位。但是,通过索引修改列表内某个值,即li[j] ='要修改成的值'时,j的索引值就是其实际索引位。

 li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc","TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc",]
 for i in li:
     j = li.index(i)  #从列表中找出某个值"第一个"匹配项的索引位,注意是第一个
     print(j)# 0 1 2 3 4 5 6 0 1 2 3 4 5 6
 print(li)  #['TaiBai ', 'alexC', 'AbC ', 'egon', ' riTiAn', 'WuSir', ' aqc', 'TaiBai ', 'alexC', 'AbC ', 'egon', ' riTiAn', 'WuSir', ' aqc']

 li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc","TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc",]
 for i in li:
     j = li.index(i)  #从列表中找出某个值"第一个"匹配项的索引位,注意是第一个
     i = i.strip()
     li[j] = i
     print(j)# 0 1 2 3 4 5 6 7 1 9 3 11 5 13
 print(li)#['TaiBai', 'alexC', 'AbC', 'egon', 'riTiAn', 'WuSir', 'aqc', 'TaiBai', 'alexC', 'AbC', 'egon', 'riTiAn', 'WuSir', 'aqc']

#########################


sort 
#方法用于在原位置对列表进行排序。
a = [2,1,3,4,5]
a.sort()# 他没有返回值,所以只能打印a
print(a)  #[1, 2, 3, 4, 5]

#测试1
a = ['b','d','c','a','z','w']  #列表中的元素全部为同一个类型的,如int或str,才可用sort
a.sort()
print(a)#['a', 'b', 'c', 'd', 'w', 'z']
#测试2
a = ['bc','d','cd','a','zr','w','bd']
a.sort()
print(a)#['a', 'bc', 'bd', 'cd', 'd', 'w', 'zr']  #按照字符串首字母排序,首字母相同按第二个字母排序


reverse 
#

p;将列表中的元素反向存放。
a = [2,1,3,4,5]
a.reverse()#没有返回值,所以只能打印a
print(a)  #[5, 4, 3, 1, 2]


# 列表也可以相加与整数相乘
l1 = [1, 2, 3]
l2 = [4, 5, 6]
print(l1+l2)  # [1, 2, 3, 4, 5, 6]
print(l1*3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]
4.列表的嵌套【必须会,重中之重】
l1 = [1, 2, 'taibai', [1, 'alex', 3,]]
# 1, 将l1中的'taibai'变成大写并放回原处。
 l1[2] = l1[2].upper()
# 2,给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。
 l1[-1].append('老男孩教育')
# 3,将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
 l1[-1][1] = l1[-1][1] + 'sb'
 l1[-1][1] += 'sb'




lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
# 将列表lis中的"tt"变成大写(用两种方式)。
 lis[3][2][1][0] = lis[3][2][1][0].upper()
 lis[3][2][1][0] = 'TT'
# 将列表中的数字3变成字符串"100"(用两种方式)。
 lis[3][2][1][1] = '100'
 lis[3][2][1][1] = str(lis[3][2][1][1] + 97)
# 将列表中的字符串"1"变成数字101(用两种方式)。
 lis[3][2][1][2] = 101
 lis[3][2][1][2] = int('10' + lis[3][2][1][2] )
 print(lis)
5.元组(了解)
6.range:

类似于列表,可以自定制数字范围的数字列表只能是数字

range与for循环结合。

#range:指定范围,生成指定数字。

# 顾头不顾腚
r = range(10)  #相当于range(0, 10)   只有一个参数时,默认从0开始,步长为1
print(r)
for i in r:
    print(i)   #打印出0-9
  
#例子    
 for i in range(1,101):
     print(i)   #打印1-100

 for i in range(2,101,2):
     print(i)   #打印100以内所有偶数

 for i in range(1,101,2):  #步长
     print(i)   #打印100以内所有奇数

 for i in range(100,0,-1):   #反向步长
     print(i)   #逆序打印从100到1

#求1-100的和
 sum = 0
 for i in range(1, 101):
     sum += i
 print(sum)

#利用len和range打印列表的索引:利用for循环,利用range将l1列表的所有索引依次打印出来
 l1 = [1, 2, 3, 'alex', '太白']
 for i in range(len(l1)):
     print(i)
               
       
# 索引(了解)
r = range(10) 
print(r[1])  #1


 for i in range(3):
     pass
 print(i)   #2  循环结束后i从0变为2

标签:太白,Python,数据类型,改查,xiao,列表,l1,print,li
来源: https://www.cnblogs.com/xiaomage666/p/10809312.html