Python初学(列表)

列表

定义列表:

(1)空列表

# []
list1 = []

(2)有内容列表

# ['A','B','C'] ,[1,2,3],[1.1,2.2,3.3],[[],[],[],[]]
list2 = ['老师', '学生', '主任', '校长']

获取列表元素

(1)通过索引(下标)

list2 = ['老师', '学生', '主任', '校长']
print(list2[1])
# 输出结果学生

切片(字符串切片相同)

list2 = ['老师', '学生', '主任', '校长']
print(list2[:2])
# 打印结果为['老师', '学生']

增加

(1)添加元素:append 追加 在列表的末尾增加一个元素

list1 = []
list1.append('数据1')
print(list1)
# 运行结果['数据1']
list1.append('数据2')
list1.append('数据3')
list1.append('数据4')
# 运行结果['数据1', '数据2', '数据3', '数据4']

(2)两个列表进行合并可以使用+ 或者 extend

list1 = ['数据1', '数据2', '数据3', '数据4']
list2 = ['老师', '学生', '主任', '校长']
# list1 = list1 + list2  # 可以用 + 
list1.extend(list2)  # 可以用extend`
print(list1)
# 运行结果['数据1', '数据2', '数据3', '数据4', '老师', '学生', '主任', '校长']
案例:
'''
买多件
商品 名称 价格
'''
container = []  # 存多件商品的容器
flag = True
money = 0
count = 0
while flag:
    # 添加商品
    name = input('商品名称:')
    price = input('商品价格:')
    num = input('商品个数:')
    goods = [name, price, num]
    container.append(goods)
    answer = input('是否继续添加?(Q或者q退出)')
    if answer.lower() == 'q':
        flag = False
print('*' * 20)
print('名称\t价格\t数量')
for goods in container:
    print('{}\t{}\t{}\t'.format(goods[0], float(goods[1]), int(goods[2])))
    money += float(goods[1]) * int(goods[2])
    count += int(goods[2])
print('共购买了{}件商品,总消费金额{}元'.format(count, money))

(3)instert

相比于append添加在列表的末尾,insert就好比插队,可以指定位置添加元素

格式:insert(下标,元素内容)
案例:
list1 = ['老师', '学生', '主任']
list1.insert(1,'校长')
print(list1)
# 输出结果['老师', '校长', '学生', '主任']

删除

(1)pop

使用方式:

pop(index) 根据下标删除列表中的元素,下标要注意不要超出范围。pop也可以不添加然后参数,默认从后往前依次删除

案例:
list1 = ['老师', '学生', '主任', '校长']
list1.pop(-1)
print(list1)
# 输出结果['老师', '学生', '主任']
list1.pop()
print(list1)
# 输出结果['老师', '学生']

(2)remove

使用方式:

remove(element) 根据元素名称进行删除,如果删除的元素在列表中不存在,则会报错list.remove(x): x not in list.

案例:
list1 = ['老师', '学生', '主任', '校长']
list1.remove('主任')
print(list1)
# 输出结果['老师', '学生', '校长']
in关键字:

一般我们使用的时候会先判断list里是否存在要删除的元素,可以使用in关键字,存在后在使用remove进行删除

list1 = ['老师', '学生', '主任', '校长']
if '老师' in list1:
    print('存在')
else:
    print('不存在')

注意:如果列表中存在多个同名的元素element,只删除遇到的第一个元素,后面的元素不会被删除。如果都删除的话可以考虑循环的方式。循环还会有漏删的情况!!

# 漏删的情况
list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
for i in list1:
    if i == '校长':
        list1.remove(i)
print(list1)
# 输出结果为['老师', '学生', '主任', '学生', '校长']

解决此问题可以使用以下方式,当然还有很多其他方式。

while循环:

list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
n = 0
while n < len(list1):
    if list1[n] == '校长':
        list1.remove('校长')
    else:
        n += 1
print(list1)
# 输出结果['老师', '学生', '主任', '学生']

for循环:

list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
del_content = '校长'
list2 = []
for i in list1:
    if del_content != i:
        list2.append(i)
list1 = list2
print(list1)
# 输出结果['老师', '学生', '主任', '学生']

(3)clear

使用方式:

clear() 不需要参数 直接清空列表元素。

(4)del

使用方式:

与pop相似,也是传下标位置

案例:
list1 = ['老师', '学生', '主任']
del list1[2]
print(list1)
# 输出结果['老师', '学生']

如果del与下标一起使用代表删除内容,如果直接del list1 则删除list1变量的指针,导致list1不在存在。

那为什么会有这种情况呢? 可以看下方内存部分!

修改

直接使用 list[下标] = 值,修改元素我们可以配合index一起使用。

查找

(1)可以使用in关键字。

(2)元素比较多的情况,我们可以使用index(值) 来找到对应的下标,如果没有此元素则报错。

(3)通过count('元素')来计数,返回整数 如果此元素不存在返回0,如果存在则返回元素个数。

内存

案例:
list1 = ['老师', '学生', '主任']
list2 = list1
list2.append("校长")
print(list1)
print(list2)

注意:输出结果都为['老师', '学生', '主任', '校长']

个人理解与字符串一致,开辟了一个内存空间用来存放list,我们可以通过id打印list的地址,在调用list2=list1时 实际上是把地址给list2,那么list2使用append函数增加元素时,是在同一个地址下增加的,所以list1、list2操作的是同一个地址的列表,输出结果一致。

那如果使用del删除list时,相当于删除list的指针,list没有指针指向就会被回收,所以list就不存在了,而clear只是删除list内容。

排序和翻转

排序:sort

使用方法:

sort()默认是升序的 reverse 为False,还可以这样使用sort(reverse = True) 控制降序。

案例: 
list1 = [10, 4, 6, 20, 17, 3, 5, 1]
list1.sort()
print(list1)
# 输出结果 [1, 3, 4, 5, 6, 10, 17, 20]
list1.sort(reverse=True)
print(list1)
# 输出结果 [20, 17, 10, 6, 5, 4, 3, 1]

排序:reverse

使用方法:

reverse()没有排序,只有翻转效果

案例
list1 = [10, 4, 6, 20, 17, 3, 5, 1]
list1.reverse()
print(list1)
# 输出结果 [1, 5, 3, 17, 20, 6, 4, 10]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值