Task04:列表

思维导图

在这里插入图片描述

程序练习

1.列表创建部分

#普通列表的创建
x1=[1,2,3,4]
#利用range创建列表,就用的是list
x2=list(range(10))
x3=list(range(1,11,2))
#range是自0 开始的左闭右开的情况

#利用推导式创建
x=[-4,-2,0,2,4]
y=[a*2 for a in x]
print(y)

x=[i**2 for i in range(1,10)]
print(x)

x=[(i,i**2) for i in range(5)]
print(x)

x=[i for i in range(100) if (i%2)!=0 and (i %3)==0]
print(x)
a=[(i,j) for i in range(0,3) for j in range(0,3)]
print(a)

x=[[i,j] for i in range(0,3) for j in range(0,3)]
print(x)
x[0][0]=10
print(x)

a=[(i,j) for i in range(0,3) if i <1 for j in range(0,3) if j>1]
print(a)

#创建4*3的二维数组
#直接创建
x=[[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
print(x,type(x))
for i in x:
    print(i,type(i))

x=[[2 for col in range(3)] for row in range(4)]
print(x,type(x))
x[0][1]=1   #前面的[0]是行坐标,后面的1是列坐标
print(x,type(x))

mix=[1,'logo',3.13,[1,2,3]]
print(mix)

2.列表是可变换的一些函数

x=['Mon','Tue','Wed','Thur','Fri']
x.append(['Sat','Sun'])
print(x)
print(len(x))

x1=['Mon','Tue','Wed','Thur','Fri']
x1.extend(['Sat','Sun'])
print(x1)

x2=['Mon','Tue','Wed','Thur','Fri']
x2.insert(2,['sunday','saturaday'])
x2.remove('Mon')
print(x2)
#del和pop的区别是del删除之后,被删除的元素不能再用,但是pop是可以再调用的。
x2=['Mon','Tue','Wed','Thur','Fri']
x2.insert(2,['sunday','saturaday'])
y=x2.pop()
print(x2)
print(y)
#list.pop移除最后一个元素,并返回该元素的值
#remove是指定具体要删的元素,后者是指定一个索引

#start:stop:step  若step=-1,则是列表反向排列
week=['Mon','Tue','Wed','Thur','Fri','Sat','Sun']
print(week[::-1])
#提供了一种反向输出的思路

3.浅拷贝和拷贝
浅拷贝只是对数据进行复制,后期如果原列表发生变化,几乎不影响浅拷贝的结果,如果是list1=list,那么在list排序的时候,list1也会发生变化。

list1=[123,456,789,213]
print(list1)
list2=list1
list3=list1[:]#浅拷贝
print(list2)
print(list3)
list1.sort()
print(list2)
print(list3)
#最终的结果就是对原始的list进行操作时并不会影响浅拷贝的结果
#用remove也可以得到相同的结果
list1=[123,456,789,213]
print(list1)
list2=list1
list3=list1[:]#浅拷贝
print(list2)
print(list3)
list1.remove(123)
print(list2)
print(list3)

list1=[123,456,789,213]
print(list1)
list2=list1
list3=list1[:]#浅拷贝
print(list2)
print(list3)
list1[0]=111#重新取值,对浅拷贝的结果没影响
print(list2)
print(list3)

list1=[[123,456],[789,213]]
list2=list1
list3=list1[:]#浅拷贝
list1[0][0]=111
list1.remove([789,213])
print(list2)
print(list3)
#remove对浅拷贝不起作用,但是重新命名会有作用

4.索引、排序等

list1=[123,456]*5
print(list)
print(list1.index(123))
print(list1.index(123,1))
print(list1.index(123,3,7))#在3,7位置之间找符合条件的123
#index是找出第一个匹配项的索引位置

x=[123,456,789]
x.reverse()
print(x[::-1])
print(x)
#反向输出和反向列表中的元素是不同的,一个只改变输出不改变原有的list
x=[123,456,789,213]
x.sort()
print(x)

x.sort(reverse=True)
print(x)

def takeSecond(elem):
    return elem[1]
x=[(2,2),(3,4),(4,1),(1,3)]
x.sort(key=takeSecond)
print(x)

x.sort(key=lambda a:a[0])
print(x)
#lamnda函数再补充说明

作业

3.山脉数组的峰顶索引
leetcode852题:

from typing import List

class Solution:
    def peakIndexInMountainArray(self, A: List[int]) -> int:
        a=A.index(max(A))
        for i in range(a):
            if A[i]>=A[i+1]:
                return False
        for i in range(a,len(A)-1):
            if A[i]<=A[i+1]:
                return False
        return True
if __name__ == '__main__':
    solution = Solution()
    answer = solution.peakIndexInMountainArray([0, 1, 2, 1, 0])
    print(answer)

总结

在学习列表的过程中,因为列表本身有索引,所以可以在循环和条件上进行处理,有些题目需要较强的逻辑性,仍需多多练习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值