数据类型详解-列表笔记

数据类型详解-列表

列表就是一组有序的数据组合,列表中的数据可以被修改

列表的定义

  • 可以使用 中括号进行定义 []
  • 也可以使用 list函数 定义
  • 在定义列表中的元素时,需要在每个元素之间使用逗号,进行分隔。[1,2,3,4]
  • 列表中的元素可以是任意类型的,通常用于存放同类项目的集合

列表的基本操作

  • 列表定义-[],list()
  • 列表相加-拼接
  • 列表相乘-重复
  • 列表的下标- 获取,更新
  • 列表元素的添加-append()
  • 列表元素的删除
    • del 列表[下标]
    • pop()函数 删除元素

列表中切片

语法==> 列表[开始索引:结束索引:步进值]

1。 列表[开始索引:] ==> 从开始索引到列表的最后
2。 列表[:结束值] ==> 从开始到指定的结束索引之前
3。 列表[开始索引:结束索引] ==> 从开始索引到指定结束索引之前
4。 列表[开始索引:结束索引:步进值] ==> 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
5。 列表[:] 或 列表[::] ==> 所有列表元素的切片
6。 列表[::-1] ==> 倒着获取列表的元素

示例:

varlist = ['刘德华','张学友','张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']

# 从开始索引到列表的最后
res = varlist[2:] # ['张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']
# 从开始到指定的结束索引之前
res = varlist[:2] # ['刘德华','张学友']
# 从开始索引到指定结束索引之前
res = varlist[2:6] # ['张国荣', '黎明', '郭富城', '小沈阳']
# 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
res = varlist[2:6:2] # ['张国荣', '郭富城']
# 所有列表元素的切片
res = varlist[:]
res = varlist[::]
# 倒着输出列表的元素
res = varlist[::-1]

# 使用切片方法 对列表数据进行更新和删除
print(varlist)

# 从指定下标开始,到指定下标前结束,并替换为对应的数据(容器类型数据,会拆分成每个元素进行赋值)
# varlist[2:6] = ['a','b','c',1,2,3]
# varlist[2:6:2] = ['a','b'] # 需要与要更新的元素个数对应

# 切片删除
# del varlist[2:6]
del varlist[2:6:2]

列表相关函数

varlist = ['刘德华','张学友','张国荣','张学友','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']

# len()  检测当前列表的长度,列表中元素的个数
res = len(varlist)

# count() 检测当前列表中指定元素出现的次数
res = varlist.count('张学友')

# append() 向列表的尾部追加新的元素,返回值为 None
varlist.append('川哥')

# insert() 可以向列表中指定的索引位置添加新的元素,
varlist.insert(20,'aa')


# pop() 可以对指定索引位置上的元素做 出栈 操作,返回出栈的元素
res = varlist.pop() # 默认会把列表中的最后一个元素 出栈
res = varlist.pop(2) # 会在列表中把指定索引的元素进行 出栈

varlist = [1,2,3,4,11,22,33,44,1,2,3,4]
# remove() 可以指定列表中的元素 进行 删除,只删除第一个。如果没有找到,则报错
res = varlist.remove(1)

# index() 可以查找指定元素在列表中第一次出现的索引位置
# res = varlist.index(1)
# res = varlist.index(1,5,20) # 可以在指定索引范围内查找元素的索引位置

# extend() 接收一个容器类型的数据,把容器中的元素追加到原列表中
# varlist.extend('123')

# s.clear() # 清空列表内容
# varlist.clear()


# reverse() 列表翻转
varlist.reverse()

# sort() 对列表进行排序
res = varlist.sort() # 默认对元素进行从小到大的排序
res = varlist.sort(reverse=True) # 对元素进行从大到小的排序
res = varlist.sort(key=abs) # 可以传递一个函数,按照函数的处理结果进行排序

深拷贝与浅拷贝

浅拷贝

浅拷贝只能拷贝列表中的一维元素,如果列表中存在二维元素或容器,则引用而不是拷贝

使用cpoy函数或者copy模块中的copy函数拷贝的都是浅拷贝

# 浅拷贝 只能拷贝当前列表,不能拷贝列表中的多维列表元素

varlist = [1,2,3]
# 简单的拷贝 就可以把列表复制一份
newlist = varlist.copy()
# 对新拷贝的列表进行操作,也是独立的
del newlist[1]
# print(varlist,id(varlist))
# print(newlist,id(newlist))
'''
[1, 2, 3] 4332224992
[1, 3] 4332227552
'''

# 多维列表
varlist = [1,2,3,['a','b','c']]

# 使用copy函数 拷贝一个多维列表
newlist = varlist.copy()

'''
print(newlist,id(newlist))
print(varlist,id(varlist))
[1, 2, 3, ['a', 'b', 'c']] 4361085408
[1, 2, 3, ['a', 'b', 'c']] 4361898496
'''
# 如果是一个被拷贝的列表,对它的多维列表元素进行操作时,会导致原列表中的多维列表也发生了变化
del newlist[3][1]

'''
通过id检测,发现列表中的多维列表是同一个元素(对象)
print(newlist[3],id(newlist[3]))
print(varlist[3],id(varlist[3]))
['a', 'c'] 4325397360
['a', 'c'] 4325397360
'''

深拷贝

深拷贝就是不光拷贝了当前的列表,同时把列表中的多维元素或容器也拷贝了一份,而不是引用

使用copy模块中的 deepcopy 函数可以完成深拷贝

# 深拷贝 就是不光拷贝了当前的列表,同时把列表中的多维元素也拷贝了一份
import copy

varlist = [1,2,3,['a','b','c']]

# 使用 copy模块中 深拷贝方法 deepcopy
newlist = copy.deepcopy(varlist)
del newlist[3][1]

print(varlist)
print(newlist)

'''
    print(newlist[3],id(newlist[3]))
    print(varlist[3],id(varlist[3]))
    ['a', 'c'] 4483351248
    ['a', 'b', 'c'] 4483003568
'''

列表推到式

List-Comprehensions

列表推导式提供了一个更简单的创建列表的方法。

常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。

采用一种表达式的当时,对数据进行过滤或处理,并且把结果组成一个新的列表

一,基本的列表推到式使用方式

结果变量 = [变量或变量的处理结果 for 变量 in 容器类型数据]

示例:

# 1 假设我们想创建一个平方列表

# 使用普通方法完成
varlist = []
for i in range(10):
    varlist.append(i**2)
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用 map函数和list完成
varlist = list(map(lambda x: x**2, range(10)))
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用列表推到式完成 下面这个列表推到式和第一种方式是一样的
varlist = [i**2 for i in range(10)]
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 2。 '1234' ==> [2,4,6,8]
# 常规方法完成需求
varstr = '1234'
newlist = []
for i in varstr:
    newlist.append(int(i)*2)
# print(newlist)  # [2, 4, 6, 8]

# 使用列表推到式完成上面的需求
newlist = [int(i)*2 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]

# 使用列表推到式+位运算完成
newlist = [int(i) << 1 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]

二,带有判断条件的列表推到式

结果变量 = [变量或变量的处理结果 for i in 容器类型数据 条件表达式]

示例:

# 0-9 求所有的偶数,==> [0, 2, 4, 6, 8]
# 常规方法完成
newlist = []
for i in range(10):
    if i % 2 == 0:
        newlist.append(i)
# print(newlist) # [0, 2, 4, 6, 8]

# 列表推到式完成
newlist = [i for i in range(10) if i % 2 == 0]
# print(newlist)  # [0, 2, 4, 6, 8]

三,对于嵌套循环的列表推到式

'''
# 下面这个 3x4的矩阵,它由3个长度为4的列表组成,交换其行和列
[
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
]

==>
[
    [1, 5, 9], 
    [2, 6, 10], 
    [3, 7, 11], 
    [4, 8, 12]
]
'''
arr = [
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
]

# 常规方法完成
# newlist = []
# for i in range(4):
#     res = []
#     for row in arr:
#         res.append(row[i])
#     newlist.append(res)
# print(newlist)

# 使用列表推到式完成
newlist = [[row[i] for row in arr] for i in range(4)]
print(newlist)
Image placeholder
871135952@qq.com
未设置
  0人点赞

没有讨论,发表一下自己的看法吧

推荐文章
数据类型详解-字符串笔记

数据类型详解-字符串 回顾字符串的定义方式 了解转义字符 字符串相关的操作 字符串格式化的方法 字符串相关函数 字符串的定义方式 单引号定义字符串‘’ 双引号定义字符串“” 三引号定义字符串‘’

Go 语言数据类型:字符类型

字符类型 字符基本输入与输出 所谓字符类型是用单引号括起来的单个字符,关于字符的定义使用如下: funcmain(){ //声明变量 varchbyte//声明字符类型 chbyte='a'//单引号

JavaScript数据类型笔记

toString()方法可以转换除了null和undefined,使用String()可以将null与undefined转换成字符串.

数据类型转换及常量笔记

var_dump() var_dump();该功能可以直接将数据的值和类型显示出来 优点:既可以查看变量类型也可以查看值 缺点:类型和值的结果无法被接收,后续代码无法使用 gettype() 获

MySQL中的数据类型笔记

一,MySQL的数据类型 数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则 数据类型限制存储在数据列列中的数据。例如,数值数据类型列只能接受数值类型的的数据 在设计表时,应该特

Java的各种数据类型对象库的处理应用笔记

父类不能调用子类独有的方法,需要调用要进行强制类型转换。

JS 中一定要了解的数据类型和数据转换

数据类型 前言 Js中的类型只有6种,其中基本数据类型有5种分别为string,number,boolen,null,undefined,引用类型有一种,就是object,object是一个大的综合

JS 中一定要了解的数据类型和数据转换

Js数据类型 前言 Js中的类型只有6种,其中基本数据类型有5种分别为string,number,boolen,null,undefined,引用类型有一种,就是object,object是一个大的

Python教程-强制数据类型转换

数据类型转换分为两种,一种是自动数据类型转换(隐式)和强制数据类型转换(显式)原则上不同的数据之间无法进行运算,自动数据类型转换是程序自发的行为,比如在运算时(或判断时)。在需要的情况下进行的操作

Go编程语言教程_2.2. Go中的数据类型

数据类型指定有效的Go变量可以保存的数据类型。在Go语言中,类型分为以下四类: 基本类型:数字,字符串和布尔值属于此类别。 聚集类型:数组和结构属于此类别。 引用类型:指针,切片,地图,函数和通道属于

Number数据类型

数据类型:Number,String,List,Tuple,Set,DictNumber:int,float,bool,complexint声明变量时常用二进制,八进制,十进制以及十六进制如何声明二进

List、Tuple、Set、Dict数据类型

List声明:[]访问列表数据:变量[n]n表示列表中数据的位置编号。修改列表数据:变量[n]=数据则可以替换原本位于n-1位置的数据。 Tuple声明:()元组与列表不同之处在于其中数据不可修改。访

数据类型转换

只有容器类数据才能转换为容器类数据。非容器类数据无法朝着容器类数据转换,因为无法进行迭代。 dict转为列表时仅保留键会舍弃值。转为元组享有和转为列表相同的特征。 转为set时会进行去重的操作,并且为

数据类型的分类

点击下方截图可插入当前视频播放画面,了解更多Mackdown语法可以点击上方?图标

python数据类型

1.string字符串类型 字符串是通过单引号、双引号或三引号进行定义的; 单、双引号定义字符串不能随意换行,需要在换行时指明换行符; 字符串中的引号可以互相嵌套,但不能嵌套自己(例如不能再单引号中

2019年度IT168技术卓越奖名单:大数据类

随着对数据价值的不断挖掘,以及全球各地区政府的政策支持,大数据市场呈现出一片欣欣向荣的发展态势。IDC在其几个月前发布的报告中曾预测,2019年全球大数据与商业分析解决方案市场的整体收益将达到1896

列表与表格笔记

####ul:无序列表disc默认值实心圆circle空心圆square方块none无 ####ol:有序列表数字1.......字母a........

列表与表格笔记

caption表格标题width宽度height高度align摆放位置centerbackground背景图片bgcolor背景颜色border1边框bordercolor边框颜色cellspacin

列表与表格笔记

Iframe width宽度height高度name名称topIframeleftIframerightIframesrc网页路径scrolling滚动条yesnoautoframeborder边框1

HTML新增类型及标签笔记

placeholder属性:提示用户输入的信息multiple可以再email中输入多个邮箱地址,使用','隔开autofocus自动获取焦点required防止域为空