python入门基础:列表

列表

在python中,有这样⼀些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表、range、元组和字符串;其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属于不可变序列。序列有共同操作:

通用操作

1.列表组合 将两个列表拼接为一个列表

#直接使用加号
list1 = [43,65,76,6]
list2 = [45,77,90,11,2,4,66]
print(list1 + list2) #[43,65,76,6,45,77,90,11,2,4,66] 产生一个新列表

2.列表重复

#直接使用乘号 列表内容重复指定遍数,产生一个新列表
print(list1 * 2) # [43,65,76,6,43,65,76,6]

3.成员操作
成员运算符:in not in

#运算的结果为布尔值
list3 = ["hello",False,189,"good"]
print(189 in list3) #True
print(180 not in list3) #True

4.获取列表元素个数

print(len(list1))#4

切片

"""
    -6   -5   -4   -3   -2    -1  从右向左                   
   [10,  20,  30,  40,  50,  60]
     0    1    2    3    4    5   从左向右
"""

"""
list[start:end:step]
# start是起始下表,start默认是0
# end的是结束下表,不包括结束下标所指元素:包头不包尾;
# step : 步长,默认是1
#         step>0,从左向右取,step等于取连续元素,如果为2
#         step <0 从右向左
"""
list1 = [10,20,30,40,50,60]
print(list1[0:3]) #[10,20,30]
print(list1[:3]) #[10,20,30]
print(list1[:]) #[10,20,30,40,50,60] 从头取到尾
print(list1[::2]) # [10,30,50] 隔一个取一个
print(list1[3::-1]) #[40, 30, 20, 10] 从右向左取
print(list1[-1:-3:-1]) #[60, 50] 从右向左取
print(list1[2:]) #[30, 40, 50, 60] 从下标为2的元素开始取到末尾
print(list1[-3::-1])#[40, 30, 20, 10] 从右向左取到第一个元素

列表最大值和最小值、求和
print(max(list1))#最大值
print(min(list1))#最小值
print(sum(list1))#求和

列表遍历

列表的遍历就是访问列表的每一个元素,可以使用while循环和for-in循环。经常使用for-in循环遍历列表

for-in语法:

for 变量名 in 列表:
 语句块A
else:
 语句块B

说明:主要用于遍历序列【遍历:依次访问序列中的每一个元素,获取元素值】
注意:不要在for-in循环中添加或删除元素

列表的增删改查

增加元素

append: 在列表末尾增加一个元素
extend: 在列表末尾增加多个元素
insert: 在下标指定的位置增加元素

  1. list.append(元素)
a = []
a.append(10)
a.append(20)
a.append(10.5)
a.append([40,50])
print(a)

2 list.extend([10,20,30]) # 参数必须是集合或可迭代对象

a.extend(10)  # 错误,10不可迭代(可以用for-in遍历的就是可迭代)
a.extend([10,20,30])
a.extend("hello")
print(a)

3 list.insert(下标,元素) 在指定的下标位置插入一个新的元素,原来的元素后移

a.insert(0,10)
a.insert(0,20)
a.insert(0,30)
a.insert(10,90) # 如果下标大于等于列表长度,就在列表末尾插入一个新元素
a.insert(-1,80)
print(a)
删除元素

pop :按下标删除
remove: 按元素值删除
del :可以删除多个元素,也可以删除指定元素
clear :清空列表

1. list.pop(i) # i默认是-1 ,如果不指定下标,默认删除最后一个;指定i的值就删除下标i所指定的元素

a = [10,20,50,30,40,50,60]
a.pop()  # 删除最后一个元素
a.pop(0)  # 删除第一个
# a.pop(100)  # 如果下标越界,报IndexError: pop index out of range
print(a)

2 list.remove(value) 从左向右找到第一个等于value元素删除,找不到报错

a.remove(50)
a.remove  # ValueError: list.remove(x): x not in list
if 100 in a:
    a.remove(100)
print(a)

3.del
按下标删除

a = [10,20,50,30,40,50,60]
del a[0]

按范围删除

del a[1:4]
print(a)

删除列表

del a
print(a)

4.list.clear() 清空列表元素

a = [10,20,50,30,40,50,60]
a.clear()
print(a)

下标不能越界,也就是说如果列表只有6个元素,不可取第七个,否则就报错

print(list1[6])  # IndexError: list index out of range

修改元素

list1[0] = 1000
print(list1)

查找元素

1.in 判断一个元素是否存在列表中
list.index(元素) 查找元素在列表中的下标(大于等于0),如果元素不存在,则报错
2. index从左向右查找,找到第一个等于指定值得元素就终止

a = [10,20,50,30,40,50,60]
index = a.index(50)
index = a.index(500)  # ValueError: 500 is not in list
print(index)

3 list.count(value) 返回列表中元素的值等于value的元素个数

print(a.count(50))  # 2
print(a.count(500))  # 0

4.读取列表元素 按下标读取

list1 = [10,20,30,'hello',10.5]
print(list1[0],list1[1],list1[2])
#10,20,30

列表反转

a.reverse()
print(a)

列表排序

a = [10,20,50,30,40,50,60]
a.sort() # 默认从小到大排序
a.sort(reverse=True)  # 从大到小
print(a)

随机列表元素

from random import choice, shuffle, randint
choice返回集合中一个随机元素

a = [10,20,30,30,40,50,60]
res = choice(a)
print(choice(a))
print(a[randint(0,len(a)-1)])

shuffle打乱元素顺序,没有返回值

shuffle(a) # 修改列表元素的排列顺序,没有返回值
print(a)

列表推导式

特点

产生新列表,运算速度快,语法简洁,够装逼。

[表达式 for value in 可迭代对象]
表达式可以是任何合法的表达式,但不能写if语句,while、for-in语句

res = [value for value in range(0,100,2)]
print(res)
等价语法
a = []
for value in range(0,100,2):
    a.append(value)
print(a)

print([value ** 0.5 for value in range(100)])
print([randint(10,100) for i in range(10)])

#求所有两位数的数字之和构成列表
print([value // 10 + value % 10 for value in range(10,100)])
#求1-10所有数的平方构成的列表
print([i*i for i in range(1,11)])

#求所有的水仙花数
print([value for value in range(100,1000) if (value//100)**3 + (value//10%10)**3 + (value%10)**3 == value])

二维列表

定义

每一个元素还是一个列表,这种列表称为二维列表
如:

a = [[1,2],[3,4],[5,6]]

按元素遍历

for i in a:
    for j in i:
        print(j,end=" ")
    print()

按下标遍历

for i in range(3):
    print(a[i])

标的序列

  print(a[i][j],end=" ")
   print()

冒泡排序

一趟排序: 相邻两个元素比较,逆序则交换
a = [10,70,50,30,40,50,60]
从小到大重新排序

a = [10,70,50,30,40,50,60]
for i in range(0,len(a)-1):
    if a[i] > a[i+1]:
        a[i], a[i+1] = a[i+1],a[i]
# print(a)
for j in range(0,len(a)-1):
    for i in range(0, len(a) - 1):
        if a[i] > a[i + 1]:
            a[i], a[i + 1] = a[i + 1], a[i]
print(a)

改进1: 不和已经有序元素比较

for j in range(0,len(a)-1):
    for i in range(0, len(a) - 1 - j):
        if a[i] > a[i + 1]:
            a[i], a[i + 1] = a[i + 1], a[i]
for j in range(0,len(a)-1):
    flag = True  # 假定列表有序
    for i in range(0, len(a) - 1 - j):
        if a[i] > a[i + 1]:
            a[i], a[i + 1] = a[i + 1], a[i]
            flag = False
    # 如果已经有序,终止循环
    if flag:
        break
print(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值