Python之Lists和tuple

748 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

Lists

列表可以包含不同类型的元素,甚至是Lists,但是通常是同一个类型的。

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    print(squares)

索引和切片

列表支持使用下标索引元素,支持切片.

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    item1 = squares[0]
    print(item1)
    item2 = squares[-1]
    print(item2)

    squaresShallowCopy = squares[1:3]
    print(squaresShallowCopy)
    print(squaresShallowCopy[0])
    squaresShallowCopy[1:2]=[]
    print(squaresShallowCopy)

输出:

1
25
[4, [1, 2]]
4
[4]

所有切片操作都会返回一个包含请求元素的新列表,被称为原列表的浅副本

增删改

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    squares.insert(1,3)
    print(squares)

输出:

[1, 3, 4, [1, 2], 'whf', 25]

删除

pop无参数就弹出尾部的,有参数可以指定位置:

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    squares.pop(1)
    print(squares)

输出:

[1, [1, 2], 'whf', 25]

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    squares[0]=0
    print(squares)

输出:

[0, 4, [1, 2], 'whf', 25]

连接/拼接

if __name__ == '__main__':
    squares = [1, 4, [1, 2], "whf", 25]
    squares+=[66,77]
    print(squares)
    squares.extend([88, 99])
    print(squares)
    squares.append("88")
    print(squares)
    print(len(squares))

输出:

[1, 4, [1, 2], 'whf', 25, 66, 77]
[1, 4, [1, 2], 'whf', 25, 66, 77, 88, 99]
[1, 4, [1, 2], 'whf', 25, 66, 77, 88, 99, '88']
10

numpy

使用NumPy库创建数组,具有许多额外的功能和数学运算,可以进行高效的数值计算并支持向量化操作。

import numpy as np

if __name__ == '__main__':
    # 直接进行加减乘除
    arr1 = np.array([0, 1, 2, 3])
    arr2 = np.array([1, 1, 2, 3])
    print(arr1 + arr2)
    print(arr1 * arr2)

    # 平方根
    print(np.sqrt(arr1))
    # 指数函数,e为底数,数组中的元素为指数
    print(np.exp(arr1))

    # 改变形状
    print(arr1.reshape((4, 1)))

    # 统计方法
    print(np.sum(arr1))
    print(np.min(arr1))
    print(arr1)
    # 找出指定指进行替换
    print(np.where(arr1 == 0, 0.00001, arr1))

tuple

tuple和list比较类似,但是tuple是不可变的,所以不能增删改。

tuple使用括号括起来,使用逗号分隔元素,如果是简单的元组可以不用:

t = 1, 2, 3
print(t)

t = ((1, 2, 3), (4, 5, 6))
print(t)

empty = ()
print(empty)

singleton = 'hello',
print(singleton)
print(len(singleton))

输出:

1 2 3
((1, 2, 3), (4, 5, 6))
()
('hello',)
1

解包

t = 1, 2, 3
x, y, z = t
print(x, y, z)

输出:

1 2 3

元素是可变的仍然可变

这个优点像java的final,不能变引用,内容你想变还是可以的:

if __name__ == '__main__':
    t = ((1, 2, 3), [4, 5, 6])
    list=t[1]
    list[0]=3
    print(t)

输出:

((1, 2, 3), [3, 5, 6])

namedtuple

具名元组,顾名思义就是让普通元组具有名字,方便对元素进行命名和访问,有点像简单类:

from collections import namedtuple

if __name__ == '__main__':
    # Student为元组名,'name', 'age', 'city'是该元组子类的字段列表
    Student = namedtuple('Student', ['name', 'age', 'city'])
    s = Student('Xiaoming', '19', 'Beijing')
    x = Student('Xiaoming', '18', 'Beijing')
    print(s)
    print(x)
    print(s[1])
    print(getattr(s, 'city'))

输出:

Student(name='Xiaoming', age='19', city='Beijing')
Student(name='Xiaoming', age='18', city='Beijing')
19
Beijing