python-列表

列表

列表的基本使用

列表格式

格式:[元素1, 元素2, 元素3, ..., 元素n]
列表中元素可以是不同类
tmp = ['xiaoWang',180, 65.0]	

下表获取元素

name = ['xiaoWang','xiaoZhang','xiaoHua']
print(name[0])
print(name[2])
print(name[2:3])

列表的增删改查


帮助方法

ctrl+点击要查询的字段

语法:

# insert(index,object)  需要两个参数
# index 表示下标,在哪个位置插入数据
# object 表示对象,具体插入哪个数据

添加元素

append

append会把新元素添加到列表末尾

A = ['xiaoWang','xiaoZhang','xiaoHua']
temp = input('请输入要添加的学生姓名:')
print(A.append(temp))
print(A)

insert

insert(index, object) 在指定位置index前插入元素object

strs = ['a','b','m','s']
strs.insert(3,'h')
print(strs) 

extend

通过extend可以将另一个集合中的元素逐一添加到列表中

a = ['a','b','c']
b = ['d','e','f']
a.extend(b)
print(a)
print(b)

修改元素

A = ['xiaoWang','xiaoZhang','xiaoHua']
A[1] = 'xiaoLu'
print(A)

查找元素

in,not in

​ in(存在),如果存在那么结果为true,否则为false

​ not in(不存在),如果不存在那么结果为true,否则false

    nameList = ['xiaoWang','xiaoZhang','xiaoHua']	 #待查找的列表

    findName = input('请输入要查找的姓名:')		   #获取用户要查找的名字

    if findName in nameList:			    #查找是否存在
        print('在列表中找到了相同的名字')
    else:
        print('没有找到')

index,count

​ index用来查找元素所在的位置,如果未找到则会报错;

​ count用来计算某个元素出现的次数

a = ['a', 'b', 'c', 'a', 'b']
a.index('a', 1, 3) # 注意是左闭右开区间
a.index('a', 1, 4)
a.count('b')
a.count('d')

删除元素

del

del:根据下标进行删除

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
del movieName[2]
print('------删除之后------movieName=%s' % movieName)

pop

​ ----默认会删除列表里最后一个数据,并且返回这个数据

pop:删除最后一个元素

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.pop()
print('------删除之后------movieName=%s' % movieName)

​ ----pop还可以传入index参数,用来删除指定位置上的数据

a=['s','f','t']
b=a.pop(1)
print(a)	---['s', 't']
print(b)	---f

remove

​ ----删除指定的元素

remove:根据元素的值进行删除

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
movieName.remove('指环王')
print(moveName)
print('------删除之后------movieName=%s' % movieName)

clear

​ ----clear 用来清空一个列表

a=['a','b','c','d']
a.clear()
print(a)	----[]

列表的遍历

​ ----遍历: 将所欲的数据都访问一遍。遍历针对的是可迭代对象

for in 遍历

a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
for a1 in a:
    print(a1)

while遍历

a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
i = 0
while i < len(a):
    print(a[i])
    i += 1

列表的嵌套

schoolNames = [[1, 2, 3], [11, 22, 33], [111, 222, 333]]

print(schoolNames[1][2])

schoolNames[1][2] = 'abc'
print(schoolNames)
[[1, 2, 3], [11, 22, 'abc'], [111, 222, 333]]

print(schoolNames[1][2][2])-----c

应用

​ -----一个学校,有3个办公室,现在有8位老师等待工位的分配,

import random
off=[[],[],[]]	-----定义一个列表用来保存3给办公室
names=['A','B','C','D','E','F','G','H']	---定义一个列表存储8位老师姓名

i=0
for name in names:
    index = random.randint(0,2)
    off[index].append(name)

i=1
for tempNames in off:
    print('办公室%d的人数为:%d'%(i,len(tempNames)))
    i+=1
    for name in tempNames:
        print("%s"%name,end='')
    print("\n")
    print("-"*20)

列表推导式

-----所谓的列表推导式,就是指的轻量级循环创建列表

1基本方式

a=[x for x in range(4)]
print(a)
----[0, 1, 2, 3]

b=[x for x in range(3,4)]
print(b)
----[3]

a = [x for x in range(3, 19)]
print(a)
----[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

a = [x for x in range(3, 19, 2)]
print(a)
----[3, 5, 7, 9, 11, 13, 15, 17]




2循环中使用if

a = [x for x in range(3, 10) if x % 2 == 0]
print(a)
----[4, 6, 8]

a=[x for x in range(3,10) if x%2!=0]
print(a)
----[3, 5, 7, 9]

a = [x for x in range(3, 10)]
print(a)
----[3, 4, 5, 6, 7, 8, 9]

3 2个for循环

a = [(x, y) for x in range(1, 3) for y in range(3)]
print(a)
----[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

4 3个for循环

a = [(x, y, z) for x in range(1, 3) for y in range(3) for z in range(4, 6)]
print(a)

习题

实现分组一个 list 里面的元素,比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]

a=[x for x in range(1,101)]

b=[a[x:x+3]for x in range(0,len(a),3)]
print(b)

列表的复制

copy方法

----将原来的列表进行复制,变成一个新的列表,这种复制方式是浅复制
nums1=[1,5,3,6,8,1]
nums2=nums1.copy()
nums2[0]=100	----修改新列表里的数据,不会影响到原有列表里的数据
print(nums2)---[100, 5, 3, 6, 8, 1]
print(nums1)---[1, 5, 3, 6, 8, 1]

copy模块

----copy模块提供了浅复制和深复制两种方式

浅拷贝

----拷贝了引用,并没有拷贝内容

import  copy
words1=['hello','good',['yes','ok'],'bad']
words2=copy.copy(words1)

words2[0]='你好'
words2[2][0]='no'
print(words1)----['hello', 'good', ['no', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']

深拷贝

----深拷贝是对于一个对象所有层次的递归拷贝

----深拷贝会将对象里的所有数据都进行拷贝

import copy

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

words2 = copy.deepcopy(words1)

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)----['hello', 'good', ['yes', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']

切片

----切片其实就是一种浅拷贝

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

words2 = words1[:]

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)----['hello', 'good', ['no', 'ok'], 'bad']
print(words2)----['你好', 'good', ['no', 'ok'], 'bad']

x = [100, 200, 300]
y = x		----等号是内存地址的赋值
z = x.copy()	----调用copy方法,可以复制一个列表
x[0] = 1
print(z)	----[100, 200, 300]

#使用copy模块实现
import copy
a=copy.copy(x)
print(a)	----[1, 200, 300]

冒泡排序

nums = [6, 5, 3, 1, 8, 7, 2, 4]
i = 0
while i < len(nums) - 1:
    i += 1
    n = 0

    while n < len(nums) - 1:
        if nums[n] > nums[n + 1]:
            nums[n], nums[n + 1] = nums[n + 1], nums[n]
        n += 1

    print(nums)

列表排序

nums = [6, 5, 3, 1, 8, 7, 2, 4]
x = sorted(nums)
print(nums)
print(x)

求列表里最大的数

nums = [3, 1, 9, 8, 4, 6, 7, ]
x = nums[0]
index = 0

i = 0
while i < len(nums):
    if nums[i] > x:
        x = nums[i]
        index = i
    i += 1
print('最大%d,下表%d' % (x, index))

删除空字符串

words=['hello','good','','','yes','ok','']
words2=[]
for word in words:
    if word != '':
        words2.append(word)
words=words2
print(words)
-----在使用for...in循环遍历列表时,最好不要对元素进行增删操作
words=['hello','good','','','yes','ok','']
for word in words:
    if word == '':
        words.remove(word)
print(words)
words=['hello','good','','','yes','ok','']
i = 0
while i < len(words):
    if words[i] == "":
        words.remove(words[i])
        i -= 1
    i += 1
print(words)
posted @ 2026-01-07 23:05  idazhi  阅读(8)  评论(0)    收藏  举报