1、初识列表

列表(List)是Python3中的"容器型"数据类型。

列表通过中括号把一堆数据括起来的方式形成,列表的长度不限。

列表里面的元素可以是不同的数据类型,但是一般是相同的数据类型。

nums = [1,3,5,7,9,11,13,15]
user_info = ["jack", 18, "male"]

==列表支持索引(index)和切片(silice)的方式访问其中的元素==。

#demo1:索引
nums = [1,3,5,7,9,11,13,15]
print(nums[1],[-1])

#output:
3 15
  • 列表索引值从0开始,即[0]对应列表的第一个元素,同理依次往右计数
  • 为简单访问列表的末尾元素,索引值可以为负数,[-1]表示列表最后一个元素,[-2]倒数第二个元素
#demo2:切片
nums = [1,3,5,7,9,11,13,15]
print(nums[0:3])
print(nums[2:-1])
print(nums[:])
print(nums[::2])
print(nums[-5:-1])
print(nums[-1:-5:-1]) # 注意切出来的元素顺序

#output:
[1, 3, 5]
[5, 7, 9, 11, 13]
[1, 3, 5, 7, 9, 11, 13, 15]
[1, 5, 9, 13]
[7, 9, 11, 13]
[15, 13, 11, 9]

==切片总结==:

  • 列表切片的返回结果是一个列表,即把切出来的元素放在一个新列表中。
  • 切片操作的方法按照 list_name[start : end : step] 的通原则执行:
    • start是切片的开始位置,此位置元素包含在切出来的列表中。
    • end是切片的结束位置,结束位置的元素不包含在切出来的列表中。
    • step是切片的间隔,即每个step切一个元素出来。默认step是1。
    • [ : ] 冒号两边什么也不写,默认切整个列表的元素。
  • step也可以是负数,即倒着切,此时end处的元素依然不包含的新列表中。

==类列表可以连接在一起==。

#demo3:
nums = [1,3,5,7,9]
new_nums = nums + [2,4,6,8,10]
print(new_nums)

#output:
[1,3,5,7,9,2,4,6,8,10]

==列表是可变的,可以修改列表中元素的值==。

#demo4:索引
nums = [1,2,3,4,5]
nums[2] = 6
print(nums)
#output:
[1,2,6,4,5]
#demo5:切片
words = ["a", "b", "c", "d", "e"]
words[1:4] = ["B", "C", "D"]
print(words)
#output:
["a", "B", "C", "D", "e"]

==列表尾部增加元素、删除列表元素、清空列表==

#demo6:
names = ['cindy', 'jack', 'alex', '小明']
names.append("jane")
names[1:3] = []
print(names)
names[:] = []
print(names)
#output:
['cindy', '小明', 'jane']
[]

==len()获得列表长度==

#demo7:
names = ["cindy", "jack", "white"]
print(len(names))
#output:
3

==max()、min()、sum()==:获得列表最大值、最小值、元素之和

#demo8:
nums = [1,2,3,4,9]
print(max(nums), min(nums), sum(nums))
# output:
9 1 19

==list()==:将其他数据类型(可迭代数据类型)转化为列表形式

#demo9:
str1 = "string"
t = (1,2,3)
s = {1,2,3}
d = {"name":"jack","age":18}
print(list(str1))   #output:['s', 't', 'r', 'i', 'n', 'g']
print(list(t))      #output:[1, 2, 3]
print(list(s))      #output:[1, 2, 3]
print(list(d))      #output:['name', 'age']

==列表嵌套==:列表可以多重嵌套

#demo10:
nums = [1,2,[3,4,5], [6,7,[0],8],3,4]

2、列表属性方法

Python中,一切皆对象,列表也不例外。

作为==List Objects==,列表对象也有很多方法属性,通过点的方式调用。

append()        insert()        extend()        # 增
pop()           remove()        clear()         # 删
index()         count()         copy()          # 查、复制
sort()          reverse()                       # 排序

==append(x)==

在列表的尾部添加一个新元素x,相当于:list_name[len(list_name):] = [x]

元素x可以是任意数据类型,因为列表是可以嵌套的,其他方法中的x同理。

#demo1:
nums = [1,3,5]
nums.append(7)
print(nums)  #output: [1,3,5,7]

==insert(index, x)==

在列表索引index位置前插入一个新元素x,原列表index处及后面的元素一次往后排。

#demo2:
nums = [1,3,5]
nums.insert(1,10)
nums.insert(-1,10)
print(nums)  #output: [1,10,3,10,5]

==extend(iterable)==

从一个可迭代对象中增加新元素到列表中,extend每次调用仅接收一个参数。

可迭代的对象包含:列表、元组、字典、集合等

#demo3:
nums = [1,2,3]
nums.extend([4,5,6])
info = {"name":"jack","age":18}
nums.extend(info)
# nums.extend(10)  报错TypeError: 'int' object is not iterable
print(nums)
#output:
[1,2,3,4,5,6,"name","jack"]

==pop( [index] )==

默认不传参数,删除列表最后一个元素并返回。

pop也可以通过指定下标索引删除特定位置元素并返回,索引值越界会报错。

注意空列表调用pop会报错:IndexError: pop from empty list

#demo4:
nums = [1,2,3,4,5]
print(nums.pop())
res = nums.pop(1)
print(nums, res)
lis = []
# lis.pop()  #报错
#output:
5
[1,3,4] 2

==remove(x)==

删除列表中第一个出现的元素 x,x不存在就报错。

#demo5:
nums = [1,2,3,2]
nums.remove(2)
print(nums)   #output:[1,3,2]

==clear()==

删除列表中的所有元素,相当于 del nums[:]

#demo6:
nums = [1,2,3]
nums.clear()
print(nums) #output:[]

==index(x[, start[, end])==

返回列表中元素x第一次出现位置处的索引值,如果x不存在就报错。

可选参数start和end,通过下标的方式限定查找的范围:start<= 范围 <end,

start和end可独立使用也可同时使用。

  • start位置处的元素在查找的范围内,end位置处的元素不在查找的范围内。
#demo7:
nums = [1,2,3,4,1,2,10]
print(nums.index(2),nums.index(2,1),nums.index(2,2,6))
# print(nums.index(2,2,5)) #报错,因为元素不存在,不在查找的范围内
#output:
1 1 5

==count(x)==

返回元素x在列表中一共出现的次数,如果列表中不存在x,返回0

#demo8:
nums = [1,2,1,2,5,6,1,2]
print(nums.count(1),nums.count(8))
#output:
3 0

==copy()==

Return a shallow copy of the list. Equivalent to nums[:]

Python3中copy涉及的内容较多,现简单介绍之,后续再深入学习。

#demo9:
nums = [1,2,3]
new_nums = nums.copy()
print(new_nums)
#output: [1,2,3]

==sort(key=None, reverse=False)==

sort不返回任何参数,只对列表做排序处理。key和reverse是可选参数。

默认sort对列表中元素做升序排列,即reverse=False,若指定reverse=True,对列表元素做降序排列。

默认sorts使用元素中的第一个元素做排序的比较对象,也可以使用key参数指定比较的对象,见demo12

#demo10:
nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]
nums.sort()
print(nums)
#output: [(1, 6), (3, 2), (4, 5), (5, 8), (6, 9)]
#即 按元组的第一个元素升序排列,默认reverse=False
#demo11:
nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]
nums.sort(reverse=True)
print(nums)
#output: [(6, 9), (5, 8), (4, 5), (3, 2), (1, 6)]
#即 按元组的第一个元素降序排列啦,激活reversr=True,降序啦
#demo11:
def sort_second_item(ele):
    return ele[1]
nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]
nums.sort(key=sort_second_item, reverse=True)
print(nums)
#output: [(6, 9), (5, 8), (1, 6), (4, 5), (3, 2)]
#即 按元组的第二个元素降序排列啦,激活key,使用自定义排序对象

==reverse()==

列表反转,仅反转列表无排序功能

nums = [1,3,2,6,9,4,3]
nums.reverse()
print(nums)
#output: [3, 4, 9, 6, 2, 3, 1]

总结:append、reverse、sort、remove等仅修改列表,无返回值,但默认是返回None

3、列表高级用法

==1、像栈(Stacks)一样使用列表==

  • “后进-先出(last-in, first-out)”
  • append()和pop()
#demo1:
nums = [1,2,3,4]
nums.append(5)
nums.append(6)
n1 = nums.pop()
n2 = nums.pop()
print(n1, n2)
#output: 6 5

==2、列表解析==

列表解析是用来生成列表的,这种列表内的元素具有某种内在规律。

#demo2:
nums = [x*2 for x in range(10)]
print(nums)
#output: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

具体用法是:[表达式 for语句 if语句]

  • 表达式如果是元组,则必须用小括号括起来;字典则大括号
  • 可以有多个for 语句和 多个if 语句
#demo3:
nums = [-2, 0, 4]
print([x for x in nums if x>=0])
print([abs(x) for x in nums])
print([{x:x*2} for x in nums])
print([(x,y) for x in nums for y in nums if x>y if x>0])
#output:
[0, 4]
[2, 0, 4]
[{-2: -4}, {0: 0}, {4: 8}]
[(4, -2), (4, 0)]

==3、矩阵转置==

把下面3x4矩阵转置

matrix = [
    [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
]
#demo4:
tran_matrix = [ [row[i] for row in martix] for i in range(4) ]
print(tran_matrix)
#output: [[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
解读:
先看 for i in range(4) 指的是四次循环生成新矩阵的4行
再看,当i=0时:内层循环 for row in matrix 这个循环有三次,因为len(matrix)=3,即代表新矩阵矩阵每行的三个数
当row=matrix[0],即row=[1,2,3,4],这是row[i]即row[0]=1
当row=matrix[1],即row=[5,6,7,8],这是row[i]即row[0]=5
当row=matrix[2],即row=[9,10,11,12],这是row[i]即row[0]=9   得到[1,5,9],
内层循环结束,外层循环接着开始,i=1
当row=matrix[0],即row=[1,2,3,4],这是row[1]即row[0]=2
当row=matrix[1],即row=[5,6,7,8],这是row[1]即row[0]=6
当row=matrix[2],即row=[9,10,11,12],这是row[1]即row[0]=10    得到[2,6,10],
依次类推......

Python3基本数据类型之列表的更多相关文章

  1. Python3 基本数据类型

    Python中的变量不需要声明,每个变量使用前必须赋值,变量赋值后才会被创建,在Python中变量就是变量,它没有类型.我们所说的"类型"是变量所指的内存中对象的类型. 等号(=) ...

  2. Python3 基本数据类型注意事项

    Python3 基本数据类型 教程转自菜鸟教程:http://www.runoob.com/python3/python3-data-type.html Python中的变量不需要声明.每个变量在使用 ...

  3. 3. Python3 基本数据类型

    Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...

  4. Python3基本数据类型(五)

    Python中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在Python中变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型 ...

  5. python003 Python3 基本数据类型

    Python3 基本数据类型Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.在 Python 中,变量就是变量,它没有类型,我们所说的"类型&qu ...

  6. python基础知识3——基本的数据类型2——列表,元组,字典,集合

    磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列 ...

  7. Python数据类型list(列表)和tuple(元组)

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  8. Python3 的数据类型

    Python3 的数据类型 整形,浮点型,布尔类型 类型转换 int() 整形 采用截断的方式即向下取整,比如 a=5.5 int (a) 返回值为5 怎样才能使int()按照"四舍五入&q ...

  9. Python特色数据类型(列表)(上)

    Python从零开始系列连载(9)——Python特色数据类型(列表)(上) 原创 2017-10-07 王大伟 Python爱好者社区 列表 列表,可以是这样的: 分享了一波我的网易云音乐列表 今天 ...

  10. python基本数据类型之列表和元组

    python基本数据类型之列表与元组 python中list与tuple都是可以遍历类型.不同的是,list是可以修改的,而元组属于不可变类型,不能修改. 列表和元组中的元素可以是任意类型,并且同一个 ...

随机推荐

  1. SqlServer自动化分区

    1.新增文件组 ALTER DATABASE [Test] ADD FILEGROUP FG2010 ALTER DATABASE [Test] ADD FILEGROUP FG2011 ALTER ...

  2. Divide and conquer:Sumsets(POJ 2549)

    数集 题目大意:给定一些数的集合,要你求出集合中满足a+b+c=d的最大的d(每个数只能用一次) 这题有两种解法, 第一种就是对分,把a+b的和先求出来,然后再枚举d-c,枚举的时候输入按照降序搜索就 ...

  3. Using UTL_DBWS to Make a Database 11g Callout to a Document Style Web Service

    In this Document   _afrLoop=100180147230187&id=841183.1&displayIndex=2&_afrWindowMode=0& ...

  4. 自定义UINavigationItem的两种方法以及相应的隐藏方法

    第一种: UIImage *searchimage=[UIImage imageNamed:@"search.png"]; UIBarButtonItem *barbtn=[[[U ...

  5. 二叉树的前序和中序得到后序 hdu1710

    今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目.中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目.这种类型完全没做过,只有纸质实现过,主体代码半个小 ...

  6. 原生JavaScript生成GUID的实现

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  7. JavaScript 图片轮播入门

    轮播要求:一个在页面居中的矩形框,图片依次从矩形框中经过 当图片完整占满矩形框时 停留一小段时间再向左边移动经过矩形框的图片自动跑到右边最后一个图的后面.核心原理:在一个for循环中利用offsetl ...

  8. &lt;a&gt;之间怎么放值&lt;/a&gt; 挺简单的,第一次遇到&#183;&#183;&#183;

    需求描述:对列表中的某一列内容添加a标签(其实就是对td标签下添加a标签了). 思路简介:拿到这个我首先的反应就是在td标签对text获取内容的代码中动态拼接<a></a>字符 ...

  9. [转] mongoose 之Shema

    总 之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很,悟出来一个写一个吧.之前喜欢误打误撞,网上搜索一点解决一下问题,后来实在 ...

  10. GP card规范学习笔记

    9.   APDU命令参考 9.1  总的编码规则 A.生命周期状态的编码 可执行的装载文件 b8 b7 b6 b5 b4 b3 b2 b1 含义 16进制命令  0 0 0 0 0 0 0 1 LO ...