Python入门(二) part1 列表

目录

一、列表的创建

1.直接方括号创建

2.range()创建列表

3.list()转换列表

4.列表推导式创建列表

二、列表的删除

三、列表内添加元素

1.lst.insert()

2.lst.append()

3.lst.extend()

四、列表内删除元素

1.lst.remove()

2.lst.pop()

3.del  

五、获取列表中的元素

1.下标获取元素

2.切片操作

3.浅拷贝与深拷贝

1).python赋值的详解

2).深拷贝用法

六、列表常用操作符

七、列表其用法

1.lst.count() 

2.lst.index() 

3.lst.sort() 

4.lst.reverse() 


一、列表的创建

1.直接方括号创建

lst = list()   
lst = []          #创建一个空列表
lst_1 = [0,1,2,3]
lst_2 = ['2','3','4',5] 
print(type(lst),type(lst_1),type(lst_2)) 
                            #<class 'list'> <class 'list'> <class 'list'>
print(lst,lst_1,lst_2)      #[] [0, 1, 2, 3] ['2', '3', '4', 5]

2.range()创建列表

range(start, stop[, step]) 左闭右开

输出对象为range

'''
range(start, stop[, step]) 左闭右开
'''

print(list(range(20)))     
    #指定输出终点为20(开区间)的整数列,默认起点为0
print(list(range(0,20)))  
    #指定输出从0-19的整数
print(list(range(3,20,2))) 
    #指定输出从3-19的整数,步长为2
print(list(range(20,3,-2)))  
    #指定由大到小输出从19-3的整数,步长为-2  (只有由大到小输出步长才能为负,负责输出空列表)

for i in range(0,20,2):
    print(i)

3.list()转换列表

print(list('asjcbwfoef'))        #将字符串对象转换为列表
print(list((1,2,3,4)))       #将tuple元组对象转换为列表
print(list({3, 7, 5}))         #将集合对象转换为列表 
print(list(range(1,10,2)))           # 将range对象转换为列表
print(list(map(str, range(10))))       # 将map对象转换为列表
print(list(zip('abcd', [1,2,3,4])))     # 将zip对象转换为列表
print(list(enumerate('Python')))        # 将enumerate对象转换为列表
print(list(filter(str.isdigit, 'a1b2c3d456')))   # 将filter对象转换为列表

4.列表推导式创建列表

data = [num for num in range(10) if num%2==0]
data1 = [(x,y) for x in range(5) for y in range(7)]  #等价于二层循环的嵌套
            
print(data)  #[0, 2, 4, 6, 8]
print(data1)
'''
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (1, 0), (1, 1), (1, 2), 
(1, 3), (1, 4), (1, 5), (1, 6), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), 
(2, 6), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 0), (4, 1), 
(4, 2), (4, 3), (4, 4), (4, 5), (4, 6)]
'''
#注意:
from random import random
data = [[random() for j in range(5)] for i in range(3)]  
'''
也等价于二层的循环,但是先执行i in range(3),将前面的代码分成三份执行,
结果是二维列表,每个元素是包含5个数字的列表
'''
print(data)

'''
输出为:
[[0.8853994649551384, 0.5401974504702698, 0.2994441674569889, 
0.9354233633069325, 0.32846604905082233], [0.29868955893760585, 
0.4944817615807019, 0.04688261440071573, 0.9564456098602425,
 0.4486649125807983], [0.9832352341323132, 0.9390120222567508, 
0.018911101669808472, 0.9156486998542285, 0.95555817499617]]
'''

*注意:

于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。

x = [a] * 4操作中,只是创建4个指向list的引用,所以一旦a改变,x中4个a也会随之改变。

二、列表的删除

del  删除对象

#del
lst = [1,2,3,4]
del lst
#接着打印  print(lst) 会报错  

三、列表内添加元素

1.lst.insert()

#insert(inedx,x) 在列表中index位置的前面插入元素。无返回值
a = [1,2,3]
a.insert(0,0)  
print(a)     #[0, 1, 2, 3]
a.insert(4,4)
print(a)     #[0, 1, 2, 3, 4]

2.lst.append()

#append(x) 将元素x追加到列表a的尾部,相当于拼接,无返回值
a = [1,2,3]
b = {4,5,6}
a.append(5)    
print(a)  #[1, 2, 3, 5]

print(a.append(6))   #输出None,
'''
不能这么用,个人理解是lst.append(x)相当于一种动作,并不会输出什么,
而是在原有a列表上做了改变
'''                
a.append(b)    #追加的元素也可以是列表、元组、集合之类的,但追加后是嵌套关系
print(a)     #[1, 2, 3, 5, 6, {4, 5, 6}]

*注意:

如果括号追加的元素是一个列表或元组,append方法会将整个列表或元组作为一个整体追加到列表尾部

a = [1,2,3,4]
a.append([5,6,7,8])
print(a)   #[1, 2, 3, 4, [5, 6, 7, 8]]

3.lst.extend()

'''
extend(L) 将列表/元组/集合/L中所有元素从后面追加到原列表中,
也可以追加字典L的key值到原列表中,无返回值
'''
a = [1,2,3]
l = [4,5,6]
a.extend(l)         #拼接列表
a.extend(tuple(l))    #拼接元组
a.extend(set(l))     #拼接集合
print(a)            #[1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6]

l_dict = {4:'hh',5:0,6:'?'}
a.extend(l_dict)    #拼接字典的key值
print(a)       #[1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]

严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个容器里的所有元素添加在列表后。

四、列表内删除元素

1.lst.remove()

#lst.remove(x)  根据值删除元素,删除值为x的元素,后面所有元素集体向前移,无返回值
a = [1,2,3,'hhh','QAQ',[1,'2']]
a.remove([1,'2'])   #值可以是列表/元组/集合/字典等
a.remove('QAQ')    #可以是字符串
a.remove(2)       #可以是整数
print(a)         #[1, 3, 'hhh']

2.lst.pop()

#pop(index) 根据下表删除元素,删除并返回列表中下标为index的值
a = [1,2,3,4,5]
print(a.pop())  #不加参数默认是删除返回最后一个元素,输出 5
print(a.pop(1))  #删除返回下标为1的元素,且后面元素集体向前移动,输出 2
print(a)        #[1, 3, 4]

remove和pop都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。而且remove是只删除,无返回值,而pop是删除后再返回此元素,如果要在删除元素后还能继续使用它,就使用方法pop()

3.del  

del var1[,var2 ......] 删除单个或多个对象。如果知道要删除的元素在列表中的位置,可使用del语句删除列表内元素

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x)  # ['Wednesday', 'Thursday', 'Friday']

五、获取列表中的元素

1.下标获取元素

通过下标(索引值)访问元素,下标在左端从0开始,在右端从-1开始。从左往右是从0一直加1,从右往左是从-1一直减一。

  • 通过元素的索引值,从列表获取单个元素,注意,列表索引值是从0开始的。
  • 通过将索引指定为-1,可让Python返回最后一个列表元素,索引 -2 返回倒数第二个列表元素,以此类推。
data = list(range(1,20,1))

#range左闭右开,数字为1-19,下摆从前往后是0-18
print(data[0])
print(data[18])

#从后往前是(-1)-(-19) 
print(data[-1])
print(data[-19])

'''
结果:
1
19
19
1

'''

2.切片操作

[start : stop : step]

获取部分元素

a = list(range(0,20))
 
print(a[:])             #获取所有元素
print(a[:3])
print(a[:])
print(a[0:20])          #从0到20,左闭右开,即0-19
print(a[4:7])           #4-6
print(a[10:20:2])       #10-19,2为步长
print(a[-3:])           #从倒数第三位到最后一位
print(a[-5:-1])         #从倒数第五位到最后一位
print(a[5:1:-1])        #"-1"为步长,即倒着从下标为5的切到下标为1的

'''
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[4, 5, 6]
[10, 12, 14, 16, 18]
[17, 18, 19]
[15, 16, 17, 18]
[5, 4, 3, 2]
'''

3.浅拷贝与深拷贝

[:]  复制列表中的所有元素

1).python赋值的详解

在Python中,用一个变量给另一个变量赋值,其实就是给当前内存中的对象增加一个“标签”而已,这两个变量指向的是同一片内存

lst = [1,2,3]
lst[1] = lst
print(lst) 
'''
结果不是[1,[1,2,3],3],而是[1,[...],3]  
'''

lst并不是[1,2,3]这个列表对象本身,而是指向它的标签。此条语句相当于创建了一个引用自身的结构,导致lst[1]指向lst本身,最终变成无限循环

所以要实现[1,[1,2,3],3],需要为lst[1]赋值为一个与原列表一样的新列表,才能达到修改原列表的目的且不发生循环引用的现象。这个新列表可以有python的浅拷贝获得

2).深拷贝用法

[:] 或 copy模块的deepcopy()

复制列表中的所有元素,也可以理解为列表从头到尾完整的切片,在不影响原列表的基础上返回与原列表一样的新列表

lst = [1,2,3]
print(lst[:])    #[1,2,3]

lst[1] = lst[:]    
print(lst)       #[1,[1,2,3],3]

lst_1 = lst
lst_2 = lst[:]
print(lst_1)     #[1,2,3]
print(lst_2)     #[1,2,3]

lst[0] = 0
print(lst)       #[0,2,3]
print(lst_1)     #[0,2,3]
print(lst_2)     #[1,2,3]  表明浅拷贝的列表不受原列表改变而改变

六、列表常用操作符

  • 等号操作符:==
  • 连接操作符 +
  • 重复操作符 *
  • 成员关系操作符 innot in
lst_1 = [1,2,3]
lst_2 = [4,5,6]

print(lst_1 + lst_2)      #连接操作符 +
print(lst_1 * 3)          #重复操作符 *
print(lst_1 == lst_2)     #等号操作符:==
print(1 in lst_1)         #成员关系操作符 in、not in
print(6 not in lst_2)

'''
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
False
True
False

'''

七、列表其用法

1.lst.count() 

list.count(obj)

数量函数,统计某个元素在列表中出现的次数

a = [1,2,2,3,3,3]
print(a.count(2))
print(a.count(3))
print(a.count(4))

'''
2
3
0
'''

2.lst.index() 

list.index(x[, start[, end]])

从列表中找出某个值第一个匹配项的索引位置,即获取下标

a = [1,2,3,4,6,2,6]
print(a.index(1))  
print(a.index(2))  #当元素x在列表中出现多次时,返回最早出现时的下标
print(a.index(6))
print(a.index(6,3,7))  #3和7是切片,取下标为3-6的切片,返回第一个值为6的元素的原始下标

'''
0
1
4
4
'''

3.lst.sort() 

list.sort(key=None, reverse=False)

排序函数,对原列表进行排序。

#sort()  按照指定规则对列表进行排序,与sorted()一样支持key参数和reverse参数

from random import shuffle,sample

a = list(range(0,20))
shuffle(a)
print(a)
a.sort()             #默认正序排列
print(a)
print('===========')

b = sample(range(1000),10)
print(b)
b.sort(reverse = True)   #加入 reverse 参数,表示反转,由正序变成倒序
b.sort(key = str)      #转换成字符串后排序
print(b)       
print('===========')


def Second(lst):        #定义获取第二个元素的函数
    return lst[1]
x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=Second)      #key值可以是自定义函数
print(x)

x.sort(key=lambda a: a[0])   #也可以是lambda匿名函数
print(x)

'''
[0, 15, 7, 14, 6, 16, 8, 19, 5, 12, 18, 10, 11, 13, 2, 4, 3, 9, 1, 17]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
===========
[370, 248, 82, 815, 179, 654, 35, 885, 966, 685]
[179, 248, 35, 370, 654, 685, 815, 82, 885, 966]
===========
[(4, 1), (2, 2), (1, 3), (3, 4)]
[(1, 3), (2, 2), (3, 4), (4, 1)]
'''

*sorted与lst.sort()方法对比

#sorted() 与 lst.sort() 对比
a = sample(range(100),10)
a_sorted = sorted(a)     # sorted() 不能对a本身直接进行修改,但有返回值,
                         #需要打印返回值或者赋值
print(a_sorted)   

a = sample(range(100),15)
a.sort()                # sort() 是直接对a本身做了修改,没有返回值,
                        #不能通过 print(a.sort()) 打印
print(a)

'''
[9, 11, 13, 14, 15, 18, 30, 45, 60, 84]
[2, 17, 18, 21, 41, 47, 51, 52, 53, 59, 60, 69, 71, 95, 96]
'''

4.lst.reverse() 

反转函数,反转列表中元素,注意不是倒序,是反转

from random import shuffle,sample

b = sample(range(100),10)
b.reverse()       # reverse() 只是反转
print(b)

'''
[22, 40, 62, 20, 46, 77, 33, 68, 39, 90]
'''

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值