列表和元组

Python ——— 列表

我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯

列表

  • 列表是由一系列按照特定顺序排列的元素组成。你可以创建任何元素,其中的元素之间可以没有任何关系.鉴于列表通常包含多个元素,我们可以随便起一个表示复数的名称
arr = ["1","2","hello"]
print(arr)
------
最后的结果
['1', '2', 'hello']

访问列表元素

  • 可以通过序号来访问列表元素
arr = ["1", "2", "hello"]
print(arr[2])

-----
结果hello

通过 index()方法在列表中查找值

  • index()方法
  • arr.index(‘hello’)

spanm = ["11", '22', '33', '44']
print(spanm.index("22"))
# 结果
# 1

获取列表元素

  • 在 Python 中 第一个列表元素的索引为 0,而不是 1
arr = ["1", "2", "hello"]
print(arr[0])

-----
结果就是1
  • Python 提供了一个新的特性 就是索引要是-1 他会返回列表最后一个元素,-2 就是倒数第二个
 arr = ["第一个","第二个","第三个"]
 print(arr[-1])
-------
结果就是 第三个
  • 练习

arr = ["第一名", "第二名", "第三名"]
print("这次小明获得了"+arr[0]+"小红获得了"+arr[-2]+"小兰获得了"+arr[-1])

修改列表元素

  • 重新赋值
arr = ["第0个","第二个","第三个"]
arr[0] = "第一个"
print(arr)
--------
最后结果
['第一个', '第二个', '第三个']

在列表中添加元素

  • 在列表中末尾添加元素,必须使用 append
arr = ["第一个","第二个","第三个"]
arr.append("第四个")
print(arr)
-------
最后结果
['第一个', '第二个', '第三个', '第四个']
  • 在列表中任何位置插入新元素 insert 他接受两个参数 第一个参数是位置 第二个参数是内容

arr = ["第一个", "第三个", "第四个"]
arr.insert(1, "第二个")
print(arr)

-------
最后结果
['第一个', '第二个', '第三个', '第四个']

列表中删除元素

  • 使用 del 语句来删除元素(必须知道要删除的位置)
arr = ['第一个', '第二个', '第三个', '第四个']
del arr[1]
print(arr)
------
最后结果
 ["第一个", "第三个", "第四个"]
  • 使用 pop()来删除元素,不加序号只能删除列表最后的元素
arr = ['第一个', '第二个', '第三个', '第四个']
result = arr.pop()
print(arr)
print(result)
----
最后结果
['第一个', '第二个', '第三个']
第四个
  • 加了序号,删除任意位置

arr = ['第一个', '第二个', '第三个', '第四个']
result = arr.pop(2)
print(arr)
print(result)
----
最后结果
['第一个', '第二个', '第四个']
第三个
  • pop()获取最后一个元素以后,改变原列表

根据值删除元素

  • remove 他接受一个参数,要删除的值找到第一个匹配的值

arr = ['第一个', '第二个', '第三个']
arr.remove("第二个")
print(arr)
----
最后结果
['第一个', '第三个']
  • 要是内部有相同的数据,他只删除第一个

arr = ['第一个', '第二个', '第三个', "第二个"]
arr.remove("第二个")
print(arr)
----
最后结果
['第一个', '第三个',"第二个"]

排序

使用方法 sort() 由小到大

  • 使用 sort()能让你对列表排序,这个操作是永久性的无法回退

arr = ['d', 'c', 'a', "b"]
arr.sort()
print(arr)
----------
最后结果
[a,b,c,d]

要是想反向排列只需要 reverse=True 由大到小

  • reverse=True T 必须要大写
arr = ['d', 'c', 'a', "b"]
arr.sort(reverse=True)
print(arr)
----
最后结果
['d', 'c', 'b', 'a']

临时排序,不改变原列表 sorted 放在开头 sorted(xxx)

  • 正向排列

arr = ['d', 'c', 'a', "b"]
arr2 = sorted(arr)
print(arr)
print(arr2)

-------
最后结果
['d', 'c', 'a', 'b']
['a', 'b', 'c', 'd']
  • 要是反向排列
arr = ['d', 'c', 'a', "b"]
arr2 = sorted(arr, reverse=True)
print(arr)
print(arr2)
------
最后结果
['d', 'c', 'a', 'b']
['d', 'c', 'b', 'a']

反转顺序

  • reverse
    反转顺序

arr = ['d', 'c', 'a', "b"]
arr.reverse()
print(arr)

----
最后结果
["b","a","c","d"]

确定列表的长度 len(xxx) 放在开头

  • len() 获取到列表的长度

arr = ['d', 'c', 'a', "b"]
print(len(arr))

用 list()和 tuple()来转换类型

  • tuple 将 类型变成元祖

print(tuple('hello'))

# 结果
# ('h', 'e', 'l', 'l', 'o')
  • list 将类型变成数组

print(list('hello2'))
# 结果
# ['h', 'e', 'l', 'l', 'o', '2']

引入 copy 模块和 deepcopy()


import copy

result = ['A', 'B', 'C', 'D']

cheese = copy.copy(result)

cheese[1] = '42'

print(cheese)
print(result)

# 结果
# ['A', '42', 'C', 'D']
# ['A', 'B', 'C', 'D']
  • deepcopy 就是复制的列表中包含了列表,这个时候就必须用 deepcopy

import copy

result = ['A', [2, 3, 4], 'C', 'D']

cheese = copy.deepcopy(result)

cheese[1] = [5, 6, 7]

print(cheese)
print(result)

# 结果
# ['A', [5, 6, 7], 'C', 'D']
# ['A', [2, 3, 4], 'C', 'D']

循环出来 Python 一个数组

  • Python 中 for 循环没有{}而是:
  • 注意 For 循环语句前面的空格

arr = ['d', 'c', 'a', "b"]
for index in arr:
    print(index)

--------------
最后的结果
d
c
a
b

循环语句内部可以嵌套

  • 有缩进就是循环体内部语句,没有缩进就是循环体外部

arr = ["小明第一名", '小红第二名', '小黄第三名', '小黑第四名']
for index in arr:
    print(index+"\r\n")
    print("----------")

通过序号来循环


arr = ["第一次", "第二次", "第三次", "第四次"]
for index in range(len(arr)):
    if index == 2:
        print("确实有")
        print(index)
        arr[index] = "第三次的结果我修改了"
    elif index == 3:
        print("第四次确实有")
        arr[index] = "第四次的结果我修改了"
    else:
        print("打出最后的结果")
print("结束了")
print(arr)
#结果
打出最后的结果
打出最后的结果
确实有
2
第四次确实有
结束了
['第一次', '第二次', '第三次的结果我修改了', '第四次的结果我修改了']

结束循环


arr = ["小明第一名", '小红第二名', '小黄第三名', '小黑第四名']
for index in arr:
    print(index+"\r")
    print("----------")
print("循环结束")

列表解析

  • 前面的代码包含三四行,而列表解析让你仅仅只需要 1 行代码就生成这样的列表

  • 列表解析将 for 循环和创建的元素合并为一行。并用[]包括

arr = [value**2 for value in range(1,11)]
print(arr)
-----------
最后结果就是
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

函数 range()

range 就是随机的生成与一系列的数字。他包前不包后

  • 它支持三个参数(起始,结束,步长) 例如(2,11,2)

for index in range(1, 5):
    print(index)
print("结束了")

---------
最后结果
1
2
3
4
结束了
  • 要是想创建数字列表的话可以用 list 将 range()的结果直接转为列表

输出结果


arr = list(range(2, 11, 2))
print(arr)

-----------
最后结果
[2, 4, 6, 8, 10]

打印出 list 这个列表


for item in list(range(2, 11, 2)):
    print(item)
print("结束了")

------
最后结果
2
4
6
8
10
结束了

利用 range 特性 创建一个空的列表

arr = []
for item in list(range(2, 11)):
    content1 = item**2
    arr.append(content1)
print(arr)
----------
最后结果
[4, 9, 16, 25, 36, 49, 64, 81, 100]

对数字进行执行简单的统计计算

  • min 最小

  • max 最大

  • sum 求和


arr = [33, 38, 105, 45, 1, 13, 109, 21, 90]
min_arr = min(arr)
max_arr = max(arr)
sum_arr = sum(arr)

print(min_arr)
print(max_arr)
print(sum_arr)

------------
最后结果
1
109
455

针对列表的一系列操作

截取 [开头:结束]

  • [开头:结束] 包前不包后

arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]
print(arr[1:3])

---------
最后的结果
['第二个', '第三个']
  • [:结束] 没指定开头的话他会从头部开始截取

arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]
print(arr[:4])

----------
最后的结果
['第一个', '第二个', '第三个', '第四个']
  • [2:]没指定结尾的话 他会从截取的位置到最后

arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]
print(arr[2:])

-----------
最后的结果

['第三个', '第四个', '第五个']
  • [-3:] 这就表示截取后三位

arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]
print(arr[-3:])
---------
最后结果
['第三个', '第四个', '第五个']

遍历


arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]
for item in arr[1:4]:
    print(item)
print("结束了")

------
最后结果
第二个
第三个
第四个
结束了

复制列表


arr = ["第一个", "第二个", "第三个", "第四个", "第五个"]

arr2 = arr[:]

print(arr2)

-----------
最后的结果
['第一个', '第二个', '第三个', '第四个', '第五个']

元祖

Python 将不能修改的值称为不可变的,而不可变的列表称为元祖

元素的定义

  • 元祖看上去和列表差不多,但是元祖使用的是圆括号()而不是方括号,定义元祖后,我们也可以使用索引来访问其他元素

message = (200,1)

print(message[0])

--------
最后结果
200
要是使用message[0] = 300 会直接报错

特别注意的就是元祖中不能只有一个元素比如(2) 这样是不行的,因为 Python 分不清小括号和元组的区别

遍历元祖中所有的值


message = (200, 1)
for item in message:
    print(item)

----------
最后结果
200
1

元祖中的单个元素不能修改,但是整个元祖可以替换


message = (200, 1)
message = (300, 20)
print(message)
-------
最后结果
(300,200)

类型转换

  • list() 变成列表

  • tuple() 变成元组

  • set() 变成集合


文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录