python 常用的列表方法

玩转python列表之前,我们需要搞清楚某个操作是否原地修改列表,是否有返回值

1、函数list

字符串转字符列表

str1 = list("Hello")
print(str1)
# ['H', 'e', 'l', 'l', 'o']

字符列表转字符串:

str1="".join(list1)
str1
# 'Hello'

2、基本的列表操作

1)元素赋值
2)删除元素

list1 = ['H', 'e', 'l', 'l', 'o']
del list1[1]
list1
# ['H', 'l', 'l', 'o']
  1. 切片赋值

使用切片赋值,可将切片替换为长度不同的序列

name = list("perl")
name[1:] = list("ython")
name
# ['p', 'y', 't', 'h', 'o', 'n']

使用切片赋值还可以在不替换原有元素的情况下插入新元素

num = [1,5]
num[1:1] = [2,3,4]
num
# [1, 2, 3, 4, 5]

这里可以理解为替换了一个空序列

再尝试一下,不同步长的切片赋值

3、列表方法

1)append()

就地添加元素

2)clear()

就地清除元素

3)copy()

常规复制只是将另一个名称关联到列表
如下对list2 赋值,list1元素值也变化了

list1 = ['H', 'e', 'l', 'l', 'o']
list2 = list1
list2[1] = "o"
list1
# ['H', 'o', 'l', 'l', 'o']

如下,将list2关联到list1的副本

list1 = ['H', 'e', 'l', 'l', 'o']
list2 = list1.copy()
list2[1] = "o"
list1
# ['H', 'e', 'l', 'l', 'o']
4)count()

计算某个元素在列表中出现的次数

list1 = ['H', 'e', 'l', 'l', 'o']
list1.count("l")
# 2
5)extend()

可以使用一个列表扩展另一个列表

a = [1,2,3]
b = [4,5,6]
a.extend(b)
a
# [1, 2, 3, 4, 5, 6]

也可以使用拼接来实现,但是拼接不会改变原列表,只会返回一个新列表

a = [1,2,3]
b = [4,5,6]
a+b
print(a+b)
print(a)
# [1, 2, 3, 4, 5, 6]
# [1, 2, 3]
6)index()

返回指定值第一次出现的索引

7)insert()

将对象插入列表

numbers = [1,2,3,5,6,7]
numbers.insert(3,"four")
numbers
# [1, 2, 3, 'four', 5, 6, 7]
8)pop()

方法pop从列表中删除一个元素(默认为最后一个元素),并返回这一元素

numbers = [1,2,3,5,6,7]
numbers.pop()
# 7
numbers
# [1, 2, 3, 5, 6]

pop 是唯一既修改列表又返回一个非None值的列表方法!!!!

使用pop()和append()可以创建后进先出(LIFO)的队列
创建先进先出(FIFO)队列可使用pop(0)和append(); pop()和insert(0)
9)remove()

删除第一个为指定值的元素

numbers = [1,2,3,5,6,7]
print(numbers.remove(2))
# None
numbers
# [1, 3, 5, 6, 7]

remove 是就地修改且不返回值的方法之一!!!!

10)reverse()

按相反的顺序排列列表中的元素

numbers = [1, 3, 5, 6, 7]
print(numbers.reverse())
print(numbers)
#  None
# [7, 6, 5, 3, 1]

reverse 就地修改列表且不返回任何值!!!!

如果要按照相反的顺序迭代序列,可使用函数reversed。这个函数不返回列表而是返回一个迭代器,也不直接修改列表
numbers = [1, 3, 5, 6, 7]
print(list(reversed(numbers)))
print(numbers)
# None
# [7, 6, 5, 3, 1]
11) sort()

方法sort用于对列表就地排序

如果我们需要在不修改原数组的条件下,得到排序结果

numbers = [3, 4, 2, 1, 7]
numbers1 = numbers.copy()
numbers1.sort()
print(numbers,numbers1)
# [3, 4, 2, 1, 7] [1, 2, 3, 4, 7]
  1. 高级排序
    方法接受两个可选参数:key和reverse.这两个参数通常是按名称指定的,称为关键字参数。
    参数key类似于cmp:你将其设置为一个用于排序的函数。然而,不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个键,再根据这些键对元素进行排序。

对提取到的数据集路径列表按照文件名中的数字编号排序

import os
import re
import glob
def find_num(str):
    return (int((re.findall(r'\d+',str))[0]))
def path2name(image_path):
    filepath, tmpfilename = os.path.split(image_path)
    shortname, extension = os.path.splitext(tmpfilename)
    return shortname
mat_paths = glob.glob("C:/Users/Administrator/Desktop/test/spectrum_pic/*.png")
mat_paths.sort(key=lambda x:find_num(path2name(x)))
print(mat_paths)
#['C:/Users/Administrator/Desktop/test/spectrum_pic\\figure3.png',
# 'C:/Users/Administrator/Desktop/test/spectrum_pic\\figure4.png',
# 'C:/Users/Administrator/Desktop/test/spectrum_pic\\figure5.png',
# 'C:/Users/Administrator/Desktop/test/spectrum_pic\\figure6.png']

4、元组:不可修改的序列

1)易错点

即使元组只有一个元素,也要在它后面加上逗号

print(3*(40+2))
# 126
print(3*(40+2,))
# (42,42,42)

2)函数tuple

与list工作原理很像,它将一个序列作为参数,将其转换为元祖,如果参数已经是元祖,就原封不动地返回它

tuple([1,2,3])
# (1,2,3)
tuple("abc")
# ("a","b","c")

猜你喜欢

转载自blog.csdn.net/Winds_Up/article/details/109024993