Python列表常用方法总结


一,创建列表 

 只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1

list  =  ['1',‘2,‘3’]

list = [] 空列表

二,添加新的元素

list.append() 在list 末尾增加一个元素

list.insert(n,'4') 在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加【在下标为4的元素位置添加n】

list1.extend(list2) 合并两个list,list2中仍有元素

三,查看列表中的值

print(list)    返回列表

for i in list: print i  遍历列表

print(list[n])  使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符

print(list.count(xx)) 查看某个元素在这个列表里的个数,如果改元素不存在,那么返回0

print(list.index(xx))找到这个元素的下标,如果有多个,返回第一个,如果找一个不存在的元素会报错

四,删除list 中的元素

list.pop() 删除最后一个元素

list.pop(n)删除指定下标位置的元素,如果删除一个不存在的元素会报错

list.remove(xx) 删除list 里面的一个元素,有多个相同的元素,删除第一个 

print(list.pop()) 有返回值,返回已经删除元素之后的列表

print(list.remove()) 无返回值

del  list[n] 删除指定下标对应的元素【从内存中回收列表的指定元素】 

del list 删除整个列表, list删除后无法访问【内存回收列表】

五,排序和反转

list.reverse()将列表反转

list.sort()排序,默认升序

list.sort(reverse=True) 降序排列

注:list 中同时存在字符串,数字时不能排序,排序针对某一列表中的同类型数据

1、sort函数

如果对python中的列表进行排序,可以使用List类的成员函数sort,该函数会在原空间上进行操作,对列表本身进行修改,不返回副本。语法如下:

L.sort(cmp=None, key=None, reverse=False)

2、sorted函数

sorted函数就比sort函数要强大许多了,sort只能对列表进行排序,sorted可以对所有可迭代类型进行排序,并且返回新的已排序的列表。语法如下:

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

一共可接受4个参数,含义分别如下:

  1. 可迭代类型,例如字典、列表、
  2. 比较函数,cmp是带两个参数的比较函数;key 是带一个参数的函数;
  3. 可迭代类型中某个属性,对给定元素的每一项进行排序
  4. 降序或升序

3、结合使用

与sorted经常结合使用的有:

①比较函数经常会用到lambda。

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。比如对元组组成的列表中某一项进行排序:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]  
sorted(students, key=lambda student : student[2])   # sort by age  
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  

②比较函数经常会用到operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
sorted函数用来排序,sorted(iterable[, cmp[, key[, reverse]]])
其中key的参数为一个函数或者lambda函数。所以itemgetter可以用来当key的参数

 例如根据第二个域和第三个域进行排序
 a = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
 sorted(students, key=operator.itemgetter(1,2))

③可迭代元素经常会用到items

items是字典中的一个方法,返回由元组组成的列表。

dict={'a':1,'b':2}
ans = sorted(dict.items(), key = lambda x:x[1], reverse = True)

六,列表操作的函数

1、len(list):列表元素个数
2、max(list):返回列表元素最大值
3、min(list):返回列表元素最小值
4、list(seq):将元组转换为列表
5、enumerate 用法(打印元素对应的下标)

list_ = [1, 2, 3, 44, 'abc', 'lkj']
for i, v in enumerate(list_):
    print("value:{},index:{}".format(v, i))

结果如下:

value:1,index:0
value:2,index:1
value:3,index:2
value:44,index:3
value:abc,index:4
value:lkj,index:5

七,list切片(list 取值的一种方法)

name[n:m]  切片是不包含后面那个元素的值(顾头不顾尾)

name[:m] 如果切片前面一个值缺省的话,从开头开始取

name[n:] 如果切片后面的值缺省的话,取到末尾

name[:] 如果全部缺省,取全部

name[n:m:s] s:步长  隔多少个元素取一次列表中的值

步长是正数,从左往右取

步长是负数,从右往左取

注:切片同样适用于字符串,字符串也有下标

 八、列表生成式

概述:
          列表生成式即List  Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

          列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。

variable = [out_exp for out_exp in input_list if out_exp == 2]

 

下面通过例题来对列表生成式进行深入的理解: 

1. 生成一个列表,列表元素分别为 [1*1,2*2,3*3……n*n],假设n = 10。

## 若用一般方法实现代码如下:

list1 = []
for i in range(1, 11):
    list1.append(i * i)

## 若用列表生成式:

list2 = [i * i for i in range(1, 11)]

2.字符串s1 ='ABC',字符串 s2 = '123',要求:生成序列 A1 A2 A3 B1 B2 B3 C1 C2 C3

## 若用一般方法实现代码如下:

list1 = []
for i in 'ABC':
    for j in '123':
        list1.append(i+j)

## 若用列表生成式:

list2 = [i+j for i in 'ABC' for j in '123']

小总结:

1,列表是一个有序的对象集合,且列表可变,在对列表进行一系列操作之后不会创建新的列表,可用id()函数对比查看

2,一个对象在另外一个对象中吗?用 in 来检查

3,从列表中删除对象 remove
remove:取一个对象值作为唯一参数。remove方法会从列表中删除指定数据值的第一次出现。
如果在列表中找到了这个数据值,就会从列表中删除包含这个值的对象(同时列表的大小减一)。如果在列表中没有找到这个数据值,会报错。

4,从列表中弹出对象 pop
pop:取一个可选的索引值(indexof)作为参数。pop方法根据对象的索引值从现有列表删除和返回一个对象。
如果调用pop时没有指定索引值,将删除和返回列表中的最后一个对象。如果指定了一个索引值,则会删除和返回那个位置上的对象。
如果列表为空或者调用pop时指定了一个不存在的索引值,会报错。

5,用对象扩展列表 extend
extend:取一个对象列表作为唯一参数。extend方法接收第二个列表,将其中的各个对象增加到现有列表。如果要将两个列表合并为一个列表,这个方法就非常有用。

6,在列表中插入一个对象 insert/append
insert:取一个索引值和一个对象作为参数。insert 方法将一个对象插入到现有列表中指定索引值的前面。
这样就可以将对象插入到现有列表的开头,或者插入到列表中的任何位置。
要把对象插入到列表末尾,用append 。

7,如何复制一个数据结构?不要使用赋值操作符复制列表;应当使用copy方法。
赋值操作都指向同一个数据,如果修改一个列表,另一个也会改变;如果想让另一个变量引用一个现有列表,可以使用赋值操作(=)
copy:list2 = list1.copy() ;如果想建立现有列表中对象的副本,用他们初始化一个新列表,就一定要使用copy 方法

8,列表切片的使用【start:stop:step】不包含stop 索引值
step 为正数时,从左至右;step 为负数时,从右至左

 

 

https://www.jb51.net/article/137924.htm


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM