python基础——列表

下面实现在Anaconda里面

1. 列表创建

通俗含义:如果你要上街买菜,需要使用到菜篮子,其中菜篮子可以装鸡蛋,蔬菜,肉类,水果。其中菜篮子就是python中所要用到的列表

创建列表:其中列表的下标可以用复数表示。

a = [1,2,3,4,5]
b = [1,2,3,4,5,"上山打老虎"]
rhym = [1,2,3,4,5,"上山打老虎"]

#序列是python里面最常见的数据结构
for each in rhym:
    print(each)

#只访问列表的某一个位置的元素
rhym[0]  #1
rhym[5]  #'上山打老虎'

length = len(rhym)
rhyme[length - 1]    #'上山打老虎'
rhym[-1] #'上山打老虎'
元素12345‘上山打老虎’
下标-6-5-4-3-2-1

1.2 列表切片

切片:可以一次性获取多个元素

ryhm = [1,2,3,4,5,"上山打老虎"]


ryhm[1,4] #2,3,4
ryhm[0:5] #1,2,3,4,5

ryhm[0:6:2] #1,3,5
ryhm[::2]   #1,3,5

ryhm[::-2]  #['上山打老虎',4,2]
ryhm[::-1]  #['上山打老虎',5,4,3,2,1]

2. 列表的诸多方法

有时候可以用切片来实现

2.1 增/删/

append():每次只能添加一个元素

extend():可以直接添加一个迭代对象

insert(a,b) :在a的位置插入元素 b

remove() :删除一个元素,如果里面有多个数据相同,这只会删除一个元素。如果删除不存在的元素则会报错。

pop(i) :指定下标去删除一个元素

clear() :清空列表的数据

heros = ["钢铁侠","绿巨人"]
heros.append("黑寡妇")
heros     #["钢铁侠","绿巨人","黑寡妇"]

heros.extend(["鹰眼","灭霸","雷神"])
#["钢铁侠","绿巨人","黑寡妇","鹰眼","灭霸","雷神"]

s = [1,2,3,4,5]
s[len(s):] = [6]  #[1,2,3,4,5,6]
s[len(s):] = [7,8,9]   #[1,2,3,4,5,6,7,8,9]

a = [1,3,4,5]
a.insert(1,2)   #[1,2,3,4,5]

a.insert(len(s),6)  #[1,2,3,4,5,6]

heros.remove("灭霸")   #["钢铁侠","绿巨人","黑寡妇","鹰眼","雷神"]
heros.pop(2)           #["钢铁侠","绿巨人","鹰眼","雷神"]

2.2 改/查

sort() :可以进行排序  s.sort(key=None,reverse=False) 对列表的元素进行原地排序,(key参数用于指定一个用于比较的函数; reverse 参数用于指定排列结果是否反转)

reverse() :将列表的元素全部倒过来

count(a) : 查找元素有多少个个数

index(i) :  查找元素i的下标

index(i,a,b) :查找元素i ,从下标a开始,到下标b结束。

copy() :拷贝元素

heros = ["钢铁侠","绿巨人","黑寡妇","鹰眼","灭霸","雷神"]

heros[3:]=["武松","林冲","李逵"]
#["钢铁侠","绿巨人","黑寡妇","武松","林冲","李逵"]

numbers = [1,3,7,8,6,1,4,1,5,7,2]
numbers.sort()   #[1,1,1,2,3,3,4,5,6,7,7,8]
numbers.reverse() #[8,7,7,6,5,4,3,3,2,1,1,1]
numbers.sort(reverse=True)  #[8,7,7,6,5,4,3,3,2,1,1,1]

heros.index("绿巨人")  #4
heros[heros.index("绿巨人")] = "神奇女侠" 
#["钢铁侠","神奇女侠","黑寡妇","武松","林冲","李逵"]

nums = [1,3,7,8,6,1,4,1,5,7,2]
nums.index(3)  #1  会找到第一个元素的下标位置
nums.index(3,1,7) #5

nums_copy1 = nums.copy()
nums_copy1  # [1,2,7,8,6,1,4,1,5,7,2]
nums_copy2 = nums[:]

3. 列表的加法和乘法

要求加号两边都是列表

s = [1,2,3]
t = [4,5,6]
s + t   #[1,2,3,4,5,6]

s * 3   #[1,2,3,1,2,3,1,2,3]
matrix = [[1,2,3],[4,5,6],[7,8,9]]  #创建一个二位列表

#反问嵌套列表
for i in matrix:
    for each in i:
            print(each)

# 1,2,3,4,5,6,7,8,9

for i in matrix:
    for each in i:
            print(each,end='')
    print()

#1 2 3
 4 5 6
 7 8 9

matrix[0]
#[1,2,3]

matrix[0][0]  #1
matrix[1][1]  #5

A = [0] * 3   # [0,0,0]

for i in range(3):
    A[i] = [0] * 3           #[[0,0,0],[0,0,0],[0,0,0]]

3.1 is运算符

python 对于不同对象的存储机制是不一样的,字符串都是不能变的,所以它只需要在内存中开辟一个位置来存放就可以了,如果有多个变量名指向同一个字符串。

比如说我们这里x和y都指向“Fishc”,那么他们的关系就是  x ☞ "Fishc",  y ☞ "Fishc"

A = [0] * 3  #[0,0,0]

for i in range(3):
    A[i] = [0] *3     #[[0,0,0][0,0,0][0,0,0]]


#特殊情况-----------------------------------------
#如果B 的取值如下:
B = [[0] * 3 ] * 3    #[[0,0,0],[0,0,0],[0,0,0]]

A[1][1] = 1   #[[0,0,0],[0,1,0],[0,0,0]]
B[1][1] = 1   #[[0,1,0],[0,1,0],[0,1,0]]

X = "Fishc"
y = "Fishc"

x is y  #True

x = [1,2,3]
y = [1,2,3]
x is y  #False

3.2 变量

将一个变量的值传给另外一个变量,我们称之为引用。

如果想获得两个独立的列表,只能通过拷贝

x = [1,2,3]
y = x     #此时y也指向x

x[1] = 1
x #[1,1,3]
y #[1,1,3]   #如果该掉变量x 则y 也会跟着改变。

3.3 浅拷贝和深拷贝

深拷贝会360°无死角的全方位拷贝。但是浅拷贝的效率会比较好,所以会默认使用浅拷贝。

#浅拷贝
x = [1,2,3]
y = [:]
print(x) #[1,2,3]
print(y) #[1,2,3]


x1 = [[1,2,3],[4,5,6][7,8,9]]
y = x.copy
x[1][1] = 0
print(x) #[[1,2,3],[4,0,6][7,8,9]]
print(y) #[[1,2,3],[4,0,6][7,8,9]]

#深拷贝
import copy
x = [[1,2,3],[4,5,6][7,8,9]]
y = copy.copy(x)  #copy模块的一个函数 (浅拷贝)

x = [[1,2,3],[4,5,6][7,8,9]]
y = copy.deepcoy(x)
x[1][1] = 0
x #[[1,2,3],[4,0,6][7,8,9]]
y #[[1,2,3],[4,5,6][7,8,9]]

4. 列表推导式

列表推导式的结果一定是列表,所以要先写上一对方括号。

列表推导式的基本语法:[expression for target in iterable]  ,expression是一个表达式,右边是一个循环体

#ord()将单个字符串转化为对应的编码

oho = [1,2,3,4,5]
for i in range(len(oho)):
    oho[i] = oho[i] * 2

oho #[2,4,6,8,10]

oho=[1,2,3,4,5]
oho=[i * 2 for i in oho]  #这就是列表推导式,速度会快上一倍
oho #[2,4,6,8,10]

x = [i for i in range(10)]
x #[0,1,2,3,4,5,6,7,8,9]

x = [i+1 for i in range(10)]
x #[1,2,3,4,5,6,7,8,9,10]

x = []
for i in range(10):
    x.append(i+1)
x #[1,2,3,4,5,6,7,8,9,10]

y = [c * 2 for c in "Fishc"]
y #['FF','ii','ss','hh','cc']

code = [ord(c) for c in "Fishc"]  #ord()将单个字符串转化为对应的编码
code #[70,105,115,104,67]

取出矩阵特定的数据:

取出矩阵第二列:先通过循环取出列表的每一行,然后通过row[1] 取出每一行下标1的元素。

去矩阵对角线元素:[0][0], [1][1], [2][2]

matrix = [[1,2,3],
          [4,5,6],
          [7,8,9]]
#通过列表推导式将矩阵第二列提取出来
col2 = [row[1] for row in matrix]
col2 #[2,5,6]

diag = [matrix[i][i] for i in range(len(matrix))
diag #[1,5,9]

练习题:使用列表推导式(先用循环取出words里面每一个下标的单词,将单词赋值给i ,再用if 语句去判断 i[0] 下标的元素是否是 'F')

A = [0] * 3
for i in range(3):
    A[i] = [0] * 3
A #[[0,0,0],[0,0,0],[0,0,0]]
A[1][1]=1
A #[[0,0,0],[0,1,0],[0,0,0]]

S = [[0] * 3 for i in range(3)]
S #[[0,0,0],[0,0,0],[0,0,0]]

even = [i for i in range(10) if i % 2 == 0]
even #[0,2,4,6,8]


#使用列表推导式筛选出F开头的单词
words = ["Great","Fishc","Brilliant","Excellent","Fantistic"]
words = [i for i in words if i[0] == 'F']
words #['Fishc','Fantistic']

实现二维列表降级为一维列表:嵌套的列表推导式实现嵌套的循环。

matrix = [[1,2,3],
          [4,5,6],
          [7,8,9]]

#实现降维
flatten = [col for row in matrix for col in row]
flatten #[1,2,3,4,5,6,7,8,9]

flatten = []
for row in matrix:
    for col in row:
        flatten.append(col)

[x + y for x in "fishc" for y in "FISHC"]
#笛卡尔乘积

_=[]
for x in "fishc":
    for y in "FISHC":
        _.append(x + y)

[[x,y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞行家贞贞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值