首页 > 编程语言 >PYTHON 数据结构 - 列表

PYTHON 数据结构 - 列表

时间:2022-11-30 18:35:38浏览次数:37  
标签:__ 排序 PYTHON self 列表 score Student 数据结构

1.1 列表

列表类似元组:

  • 可以存放多个元素(可不同类型)
  • 有顺序
  • 可重复

列表是可变的,可添加,删除,排序元素

1.2 列表的创建

# 列表 =[元素1,元素2, ...]
a = [1,2,3,4]
a = []  # 空列表

# 用list创建,list(序列)
>>> a = list("hello")
>>> a
['h', 'e', 'l', 'l', 'o']

>>> a = list()  # 空列表
>>> a
[]

1.3 列表的访问与切片

同字符串,元组。参考之前的笔记

>>> a = [1,2,3,4,5]
>>> a[1]
2
>>> a[1:3]
[2, 3]

1.4 列表的修改

1.4.1 追加元素

# 用追加单个元素
>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

# 追加一个列表(依次导入元素) 相当于列表相加
>>> 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]
>>> c = a + b   # 两个列表的元素合并到一个新列表
>>> c
[1, 2, 3, 4, 5, 6]

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a += b  #类似extend
>>> a
[1, 2, 3, 4, 5, 6]

1.4.2 插入元素

# list.insert(索引, 元素值)
>>> a = [1,2,3]
>>> a.insert(1,1.5)
>>> a
[1, 1.5, 2, 3]

1.4.3 替换元素

>>> a = [1,2,3]
>>> a[0] = "first"
>>> a
['first', 2, 3]

1.4.4 删除元素

# remove(item)方法
>>> a = [1,"next",1,2,3]
>>> a.remove(1)  # 从左开始,只删除一次, 没有抛出异常
>>> a
['next', 1, 2, 3]

# pop(index)方法
# 按索引删除,如果index省略,删除最后一个
>>> a = [1,2,3]
>>> a.pop(0) ## 删除第一个
1
>>> a
[2, 3]
>>> a.pop()  ## 删除最后一个
3
>>> a
[2]

# del 删除
>>> a = [1,2,3]
>>> del a[0]
>>> a
[2, 3]

# 删除一片区域
>>> a = [1,2,3,4,5,6]
>>> del a[0:3]
>>> a
[4, 5, 6]

1.5 列表的其它方法

  • 列表元素翻转

    >>> a = [1,2,3,4,5]
    >>> a.reverse()
    >>> a
    [5, 4, 3, 2, 1]
    
  • 列表复制

    >>> a = [1,2,3]
    >>> b = a.copy()
    >>> b
    [1, 2, 3]
    
  • 列表清空

    >>> a = [1,2,3]
    >>> a.clear()
    >>> a
    []
    
  • 列表元素查找

    >>> a = [1,2,3,4]
    >>> a.index(3)   # 未找到报异常
    2
    
    >>> a = [1,2,3,4,1,2,3,4]
    >>> a.index(3,3)  # index(元素,开始位置 ,结束位置)
    6
    
  • 统计出现的次数

    >>> a = [1,2,3,4,1,2,3,4]
    >>> a.count(2)
    2
    
  • 其它运算

    * 用于重复列表,in, not in 与序列一致。

1.6 列表的排序

1.6.1 列表的sort方法排序

列表排序用sort方法实现。

sort(key=None, reverse=False)

key指定排序的函数,reverse表示降序,默认是升序

# 能排序的自动排序
a = [1,3,56,4,2,0]
a.sort()
print(a)

对于一些自定义对象无法排序,sort会报错,可以指定一个函数告诉排序的方法

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __str__(self):
        return "{}\t{}".format(self.name, self.score)

studs = [Student('张三', 100), Student('李四', 120), Student('王五', 98), Student('吴用', 70)]

def sort_score(stud:Student):
    return stud.score
studs.sort(key = sort_score)

for student in studs:
    print(student)

python内部sort排序是通过比较运算 "<"来确定排序对象的先后顺序,可以重载 "<" 实现排序。

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __lt__(self, other):  # 重载 < 
        return self.score - other.score

    def __str__(self):
        return "{}\t{}".format(self.name, self.score)


studs = [Student('张三', 100), Student('李四', 120), Student('王五', 98), Student('吴用', 70)]

studs.sort()

for student in studs:
    print(student)

1.6.2 系统内置函数sorted函数排序

list.sort会修改列表的顺序,而sorted不修改原列表的顺序,会生成一个新的列表。

sorted(iterable, key=None, reverse=False)

iterable是一个列表,key后面跟上排序函数,reverse为True表示降序

>>> sorted(a)
[0, 1, 2, 3, 4, 5]
>>> sorted(a, reverse=True)
[5, 4, 3, 2, 1, 0]

指定一个字段的排序函数:

class Student:
    def __init__(self, name, gender,score):
        self.name = name
        self.gender = gender
        self.score = score

    def __str__(self):
        return "{}\t{}\t{}".format(self.name, self.gender, self.score)


studs = [
    Student('张三', '男', 100),
    Student('李四', '男', 120),
    Student('王红', '女', 98),
    Student('吴用', '女', 170)
]

new_list = sorted(studs, key=lambda student: student.score)

for student in new_list:
    print(student)

指定多个字段的排序函数:

对于((1,2,3),(1,2,4)) 排序的时候先按第一列,第一列相同按第二列,第二列相同按第三列排序,如果函数能返回一个元组(可排序的值),就可以按多字段排序了。

# 先按性别,再按成员
class Student:
    def __init__(self, name, gender, score):
        self.name = name
        self.gender = gender
        self.score = score

    def __str__(self):
        return "{}\t{}\t{}".format(self.name, self.gender, self.score)


studs = [
    Student('张三', '男', 100),
    Student('李四', '男', 120),
    Student('王红', '女', 98),
    Student('吴用', '女', 170)
]

new_list = sorted(studs, key=lambda student: (student.gender, -student.score))

for student in new_list:
    print(student)

用cmp函数排序

思想:compare(x,y)函数, 会在x<y时返回负数,在x>y时返回正数,如果x=y则返回 0

可以用于多条件排序,只需要定义函数,返回值是正数,负数和0就可以了。

# 用cmp排序


from functools import cmp_to_key

a = [1, 3, 2, 100, 80, 7, 5]

def cmp(n1: int, n2: int) -> int:
    return n1 - n2

new_list = sorted(a, key=cmp_to_key(cmp))
print(new_list)

1.7 列表推导式

可以通过两种方式:

  • [item for item in iterable]
  • [item for item in iterable if condition]
>>> a = [i for i in range(10)]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = [i for i in range(10) if i%2==0]
>>> a
[0, 2, 4, 6, 8]

标签:__,排序,PYTHON,self,列表,score,Student,数据结构
From: https://www.cnblogs.com/three-sheep/p/16939335.html

相关文章