Python数据类型详解-列表#学习猿地

## 数据类型详解-列表

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

## 列表的定义

+ 可以使用 中括号进行定义 [] 

+ 也可以使用 list函数 定义

+ 在定义列表中的元素时,需要在每个元素之间使用逗号,进行分隔。[1,2,3,4]

+ 列表中的元素可以是任意类型的,通常用于存放同类项目的集合

## 列表的基本操作

+ 列表定义-[],list()

+ 列表相加-拼接

+ 列表相乘-重复

+ 列表的下标- 获取,更新

+ 列表元素的添加-append()

+ 列表元素的删除

 + del 列表[下标]

 + pop()函数 删除元素

## 列表中切片

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

1。 列表[开始索引:] ==> 从开始索引到列表的最后

2。 列表[:结束值]  ==> 从开始到指定的结束索引之前

3。 列表[开始索引:结束索引] ==> 从开始索引到指定结束索引之前

4。 列表[开始索引:结束索引:步进值] ==> 从指定索引开始到指定索引前结束,按照指定步进进行取值切片

5。 列表[:] 或 列表[::] ==> 所有列表元素的切片

6。 列表[::-1] ==> 倒着获取列表的元素

示例:

```python

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]

```

## 列表相关函数

```python

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函数拷贝的都是浅拷贝

```python

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

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 函数可以完成深拷贝

```python

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

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 容器类型数据]

示例:

```python

# 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 容器类型数据 条件表达式]

示例:

```python

# 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]

```

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

```python

'''

# 下面这个 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)

```


掌握学习方法,不如会弯道超车!

学习猿地:成就自己的只需一套精品!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容