百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python 列表与元组(史上最全攻略)

toyiye 2024-06-21 12:25 11 浏览 0 评论

一、列表(list)

列表(list)作为 Python 中最常用的数据类型之一,是一个可增加、删除元素的可变(mutable)容器。

列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、字典以及其他自定义类型的对象。

1、获取列表中的元素

列表中的每个元素都有一个下标索引,第一个索引是0,第二个索引是1,依此类推。可以使用下标索引来访问列表中的元素:

# 列表元素示例 

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])
--------------------------------------
list1[0]: physics
list2[1:5]: [2, 3, 4, 5 ]

2、添加元素

(1) append()

L.append(元素m):在列表L最后添加一个元素m,一次添加一个元素,并且只能在列表最后;

# append()示例,定义列表L,默认有3个元素

L = ['xiaoWang','xiaoZhang','xiaoHua']
print(L)
temp = 'XiaoYu'
L.append(temp)
print(L)
---------------------------------------
['xiaoWang', 'xiaoZhang', 'xiaoHua']
['xiaoWang', 'xiaoZhang', 'xiaoHua', 'XiaoYu']

(2) extend()

L.extend([元素A,元素B,……]):对特定列表进行扩展和增长,可以一次添加多个元素,只能添加在列表的最后;

#  extend()示例

a = [1, 2]
b = [3, 4]
a.extend(b)
print(a)
-------------------------------------
[1, 2, 3, 4]

(3) insert()

L.insert(A,元素B):在列表L里面的索引A处加入元素B;

# insert()示例

a = [0, 1, 2]
a.insert(1, 3)
print(a)
------------------------------
[0, 3, 1, 2]

3、删除元素

(1) del L[n]

删除掉列表L里面的索引号位置为n 的元素,这里需要注意的是del是一种操作语句;

# del 示例

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print(movieName)
del movieName[2]
print(movieName)
---------------------------------------------------------------------------
['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情']
['加勒比海盗', '骇客帝国', '指环王', '霍比特人', '速度与激情']

(2) L.pop()

将列表L的最后一个元素返回,并且在此基础上进行删除;

#  pop() 示例

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print(movieName)
m = movieName.pop()
print(movieName)
print(m)
-------------------------------------------------------------------------
['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情']
['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人']
速度与激情

(3) L.remove(A)

移除掉列表L里面的第一个特定元素A;

# remove() 示例

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情','指环王']
print(movieName)
movieName.remove('指环王')
print(movieName)
--------------------------------------------------------------------------------
['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情', '指环王']
['加勒比海盗', '骇客帝国', '第一滴血', '霍比特人', '速度与激情', '指环王']

4、修改元素

先通过索引来确定要修改的元素,然后重新赋值进行修改;

# 示例

A = ['xiaoWang','xiaoZhang','xiaoHua']
A[1] = 'xiaoYu'
print(A)
-------------------------------------------
['xiaoWang', 'xiaoYu', 'xiaoHua']

5、查找元素

(1) in,not in

判断一个元素是否存在(不存在)于列表中;

#  示例

nameList = ['xiaoWang','xiaoZhang','xiaoHua']      # 待查找的列表
findName = 'xiaoYu'     # 要查找的名字
if findName in nameList:
    print('1')
else:
    print('2')
if findName not in nameList:
    print('3')
else:
    print('4')
-----------------------------------------------------
2
3

(2) index,count

L.index(a,m,n):获取元素a在索引在m到n-1的列表L中的索引值;

L.count(a):获取元素a在列表L中出现的次数;

#  示例

L = ['a', 'b', 'c', 'a', 'b']
print(L.index('a', 1, 3)) # 注意是左闭右开区间
print(L.index('a', 1, 4))
print(L.index('a'))
print(L.count('b'))
print(L.count('d'))
------------------------------------------------
ValueError   Traceback (most recent call last)
ValueError: 'a' is not in list    # 因为在L[1:3]中不存在a,所以第一个print会出现报错
3
0
2
0

6、排序

(1) sort()

用法:list.sort(cmp=None, key=None, reverse=False)

  • cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序;
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;
  • reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认);

sort()是可变对象(字典、列表)的方法,无返回值,sort()会改变可变对象,因此无需返回值。sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回一个异常。

# sort() 示例

a = [5,7,6,3,4,1,2]
b = a.sort()
print(a)
print(b)
-----------------------------
[1, 2, 3, 4, 5, 6, 7]
None

(2) sorted()

sorted()不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。

# sorted() 示例

mystring="54321"       # 字符串
mytuple=(5,4,3,2,1)      # 元组
mylist=[5,4,3,2,1]           # 列表
a = sorted(mystring)
b = sorted(mytuple)
c = sorted(mylist)
print(a)
print(b)
print(c)
-----------------------------------
['1', '2', '3', '4', '5']
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

(3) reverse()

反转排序,把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序整理;

# reverse() 示例

a = [5,4,3,2,1]
a.reverse()
print(a)
-------------------------
[1, 2, 3, 4, 5]

7、拷贝

# 各种拷贝示例

import copy 
a = [[1,2],10,20]
a1 = a                           #第1种
a2 = a[:]                        #第2种
a3 = list(a)                    #第3种
a4 = a*1                       #第4种
a5 = copy.copy(a)        #第5种
a6 = [x for x in a]         #第6种
a7 = copy.deepcopy(a)  #第7种
 
a.append(30)
a[0].append(3)
 
print('a:',a)
print('a1:',a1)
print('a2:',a2)
print('a3:',a3)
print('a4:',a4)
print('a5:',a5)
print('a6:',a6)
print('a7:',a7)
-----------------------------------------------
a: [[1, 2, 3], 10, 20, 30]
a1: [[1, 2, 3], 10, 20, 30]
a2: [[1, 2, 3], 10, 20]
a3: [[1, 2, 3], 10, 20]
a4: [[1, 2, 3], 10, 20]
a5: [[1, 2, 3], 10, 20]
a6: [[1, 2, 3], 10, 20]
a7: [[1, 2], 10, 20]

a1 = a 表示 a1 和 a 指向同一个内存地址,只是名称不同;

a2~a6 则是指向不同的列表,因为创建新的列表,所以原列表发生改变时,拷贝列表不变,但是里面元素本身的地址并没有改变,所以如果子元素为列表时,子元素列表在拷贝时地址并不会发生变化,所以当原列表中子列表发生改变时,拷贝列表同样会发生改变;

a7 是深度拷贝,所以无论列表中嵌套了几层列表,拷贝列表都不会随着原列表的改变而改变。

二、元组

Python的元组与列表类似,元组是不可变(immutable)对象,自然也就没有增加、删除元素的方法。元组使用小括号,列表使用方括号。

1、创建

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可;

# 元组创建示例

tup1 = ()
tup2 = (24,)
tup3 = ('php', 'python', 27, 300)

2、访问元组

元组可以使用下标索引来访问元组中的值;

# 元组访问示例

tup1 = ('php', 'python', 27, 300)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print("tup1[0]: ", tup1[0])
print("tup2[1:5]: ", tup2[1:5])
---------------------------------
tup1[0]:  php
tup2[1:5]:  (2, 3, 4, 5)

3、修改元组

元组中的元素值是不允许修改的,但可以对元组进行连接组合;

# 元组连接示例

tup1 = ('php', 'python', 27, 300)
tup2 = (1, 2, [56, 'java'] )
tup = tup1 + tup2
print(tup)
---------------------------------------
('php', 'python', 27, 300, 1, 2, [56, 'java'])

4、删除元组

元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组;

# 删除示例

tup = ('php', 'python', 27, 300)
print tup
del tup
print tup
----------------------------------
('php', 'python', 27, 300)
NameError   Traceback (most recent call last)
<ipython-input-10-142d96e04d75> in <module>()
      2 print(tup)
      3 del tup
----> 4 print(tup)
NameError: name 'tup' is not defined

5、内置函数

cmp(tuple1, tuple2) :比较两个元组元素;

len(tuple) :计算元组元素个数;

max(tuple) :返回元组中元素最大值;

min(tuple) :返回元组中元素最小值;

tuple(seq) :将列表转换为元组。


更多精彩内容请关注VX公众号 ‘Python研习所’ !!!

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码