前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 基础一 (列表)

Python 基础一 (列表)

作者头像
数据STUDIO
发布2021-06-24 10:21:00
7020
发布2021-06-24 10:21:00
举报
文章被收录于专栏:数据STUDIO

Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。最常见的是列表和元组。

序列通用的操作包括:索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值

序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。

列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示

代码语言:javascript
复制
list1 = ['数据STUDIO', 2020, 'Jim']
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

  • 列表是一种可变的数据类型
  • 列表中的数据类型不限
  • 列表中的多个元素之间用逗号进行分割
  • 最外层用[ ]括起来

列表的定义

list()

使用list()将其他可迭代的数据类型转换为列表
代码语言:javascript
复制
>>> s = 'python'      # 目前的可迭代对象,我们就学了一个字符串
>>> L = list(s)
>>> L
['p', 'y', 't', 'h', 'o', 'n']
>>> type(L)
list
# len()也可以用来查看列表的元素个数
>>> len(L)
6
使用 [ ] 来定义
代码语言:javascript
复制
>>> L = ['life', 'is',  'short', 'I', 'use', 'python'] #列表中的元素是以逗号分隔
>>> L
['life', 'is',  'short', 'I', 'use', 'python']
>>> type(L)
list

# 列表中的内容可以是任意的数据类型
>>> list1 = [1234, 'Hello' ,3.14 ,True, 'abc']
>>> list1
[1234, 'Hello', 3.14, True, 'abc']

# 多维列表
>>> list2 = [1, '数据STUDIO', ['S', 'T', 'U', 'D', 'I', 'O']] # 二维列表
>>> list2
[1, '数据STUDIO', ['S', 'T', 'U', 'D', 'I', 'O']]
>>> list4 = [1, 2, 3, '数据STUDIO', [1, 2, [1, [1, 2, 3], 3], 4, 5] ] # 四维列表
>>> list4
[1, 2, 3, '数据STUDIO', [1, 2, [1, [1, 2, 3], 3], 4, 5] ]

列表的运算

列表的运算与字符串类似,不同于一般意义上的数字加减乘除。

+号运算

使得列表中的所有元素存放在一个新的列表当中,生成新的列表,原列表不变。

代码语言:javascript
复制
>>> a = [1, 2, 3]
>>> b = [4, 5, [6, 7, 8]]
>>> a+b
[1, 2, 3, 4, 5, [6, 7, 8]]
>>> a
[1, 2, 3]

*号运算

与字符串类似,重复列表当中的元素,原列表不变。

代码语言:javascript
复制
>>> a = ['关注', '数据STUDIO']
>>> a*3 # 重要的事情说三遍
['关注', '数据STUDIO', '关注', '数据STUDIO', '关注', '数据STUDIO']
>>> a
['关注', '数据STUDIO']

in 包含运算

判断元素是否在列表当中。

代码语言:javascript
复制
>>> studio = ['关注', '在看', 
              '分享', '数据STUDIO']
>>> '关注' in studio
True # 包含在内返回Ture

>>> '点赞' in studio
False # 没包含在内即返回False
# 记得文末点赞哟

另一个较为特殊的写法两个或以上字符串,用逗号隔开,有in判断的会返回Trueor False,没有判断的返回本身,且总体存储在元组里。

代码语言:javascript
复制
>>> '点赞', '在看' in studio
('点赞', True) 

索引和切片

列表是有序的序列,所以每一个数据都有唯一对应的索引值。第一个元素对应的索引值是0,和字符串是一样的

列表[开始位置: 终止位置: 步长和方向]


  • 开始的位置包含在内,终止的位置不包含在内;
  • 步长的默认值为1,当步长设置为正整数,代表方向从左往右,当步长设置为负整数,代表从后往前进行切片;
  • 起始位置和终止位置,如果不填,代表从头到尾所有数据。

一维列表的切片和索引

代码语言:javascript
复制
>>> lt1 = ['点赞', '在看', '转发', '收藏', '关注', '数据STUDIO']
>>> lt1
['点赞', '在看', '转发', '收藏', '关注', '数据STUDIO']

# 取出 '点赞'
>>> lt1[0]
'点赞'

# 取出 '数据STUDIO'
>>> lt1[-1]
'数据STUDIO'

# 取出 ['点赞', '在看', '转发']
>>> lt1[0:3] # 注意切片时最后一个元素取不到
['点赞', '在看', '转发']

# 取出 ['在看', '收藏', '数据STUDIO']
>>> lt1[1: 6: 2]
['在看', '收藏', '数据STUDIO']

# 翻转列表
>>> lt1[::-1]
['数据STUDIO', '关注', '收藏', '转发', '在看', '点赞']

多维列表的切片和索引

代码语言:javascript
复制
>>> lt5 = ['关注', '在看', 'Jim', '点赞', ['关注', '在看', ['关注', ['关注', '数据STUDIO', '收藏'], '收藏'], '点赞', '转发'] ]
>>> len(lt5)
>>> lt5[4]
['关注', '在看', ['关注', ['关注', '数据STUDIO', '收藏'], '收藏'], '点赞', '转发']

>>> lt5[4][2]
['关注', ['关注', '数据STUDIO', '收藏'], '收藏']

>>> lt5[4][2][1]
['关注', '数据STUDIO', '收藏']

>>> lt5[4][2][1][1]
'数据STUDIO'

>>> lt5[4][2][1][1][2:]
'STUDIO'

列表元素的修改

因为列表是可变数据类型,因此对列表元素的修改,是直接修改原列表元素。且内存中存储lt2值的原始块不变

代码语言:javascript
复制
>>> lt2 = ['关注', ['未点赞', '数据STUDIO', '收藏']]
>>> lt2
['关注', ['未点赞', '数据STUDIO', '收藏']]
>>> id(lt2)
2328977461768
# 将"未点赞"改为"已点赞"
>>> lt2[1][0] = '已点赞'
>>> lt2
['关注', ['已点赞', '数据STUDIO', '收藏']]
>>> id(lt2)
2328977461768

>>> lt3 = ['关注', '在看', ['关注', '数据', '收藏'], '收藏']
>>> lt3[1:4] = ['数据', 'STUDIO']
>>> lt3
['关注', '数据', 'STUDIO']

Python是按引用调用还是按值调用?

只了解它的工作原理:

不可变对象(如字符串、数字和元组等)是按值调用的。请注意下面的例子,当在函数内部修改时,name的值在函数外部不会发生变化。name的值已分配给内存中该函数作用域的新块(id改变)

代码语言:javascript
复制
>>> name = '数据'
>>> def add_chars(s):
...     s += 'STUDIO'
...     print(s)
...     print(id(s))
>>> add_chars(name) 
数据STUDIO
2328969879056

>>> print(name)
>>> print(id(name))
数据
2329036911600

可变对象(如列表等)是通过引用调用的。注意下面的例子中,函数外部定义的列表在函数内部的修改是如何影响到函数外部的。函数中的参数指向内存中存储list1值的原始块(id未改变)

代码语言:javascript
复制
>>> list1 = ['关注','数据STUDIO']
>>> def add_element(seq):
...     seq.append( '点赞')
...     print(seq)
...     print(id(seq))
>>> print(list1)
>>> print(id(list1))
['关注', '数据STUDIO']
2329062571400

>>> add_element(list1)
['关注', '数据STUDIO', '点赞']
2329062571400

>>> print(list1)
>>> print(id(list1))
['关注', '数据STUDIO', '点赞']
2329062571400

列表对象的常用方法

三个增加方法

方法

代码

功能

list.append(要增加的元素)

在列表的末尾增加一个元素

list.extend(要添加的列表)

把列表中的每一个元素追加到另一个列表当中

list.insert(索引, 要插入的元素)

新元素是插入到该索引之前的那个位置


append 追加

原列表.append(要添加的元素),在最后添加一个元素

代码语言:javascript
复制
>>> list6 = ['life', 'is', 'short', 'I', 'use', 'python']
>>> list6
['life', 'is', 'short', 'I', 'use', 'python']

#append(),在最后面增加,没有返回新的对象
>>> list6.append('关注')    
>>> list6
['life', 'is', 'short', 'I', 'use', 'python', '关注']

#在最后面追加一个列表作为最后一个元素
>>> list6.append(['点赞', '数据STUDIO', '收藏'])    
>>> list6
['life', 'is', 'short', 'I', 'use', 'python', '关注', ['点赞', '数据STUDIO', '收藏']]

extend 扩展

原列表.extend(要添加的列表)a.extend(b)是把b每一个元素都添加到a

代码语言:javascript
复制
>>> list7 = ['life', 'is', 'short']
>>> list8 = ['I', 'use', 'python' ]
>>> list7.extend(list8)   # 注意和append()的区别
['life', 'is', 'short', 'I', 'use', 'python']

insert 插入

insert(索引,要插入的对象),insert(索引i,v)表示,把v插入到索引i所对应的元素之前

代码语言:javascript
复制
>>> list1 = ['life', 'is', 'short', 'I', 'use', 'python']
>>> list1.insert(5, '数据STUDIO')
['life', 'is', 'short', 'I', 'use', '数据STUDIO', 'python']

四种删除方法

方法

代码

功能

del list[要删除的索引值]

按索引值删除列表中元素, 不加索引直接删除列表

list.clear()

清空列表中的所有元素,剩下一个空列表

list.pop(要删除元素的索引值)

不写参数值,一般会删除最后一个元素。该方法会返回这个删除的元素

list.remove(要删除的元素)

按元素删除列表中元素


del

del 列表名[要删除元素的索引值], 根据下标进行删除

不加索引直接删除列表

代码语言:javascript
复制
>>> list1 = ['点赞', '关注', '数据STUDIO', '未点赞']
>>> del list1
#直接删除变量,而非空列表
>>> list1
-------------------------------------------------
NameError       Traceback (most recent call last)
<ipython-input-249-32e3a55f6bef> in <module>
----> 1 list1

NameError: name 'list1' is not defined

按索引值删除列表中元素

代码语言:javascript
复制
>>> list1 = list('数据STUDIO')
>>> list1
['数', '据', 'S', 'T', 'U', 'D', 'I', 'O']

>>> del list1[0:2]
>>> list1
['S', 'T', 'U', 'D', 'I', 'O']

clear()

清空列表所有元素。剩下一个空列表

代码语言:javascript
复制
>>> list2 = ['S', 'T', 'U', 'D', 'I', 'O']
>>> list2.clear()
>>> list2
[]
# 注意二者的区别del list2是直接删除这个变量,list2.clear()是直接情况列表

pop()

默认删除最后一个,并返回这个被删除的元素。原列表中无此元素。

代码语言:javascript
复制
>>> list3 = ['点赞', '关注', '数据STUDIO', '未点赞']
>>> list4 = list3.pop(1)     # 指定删除某索引的元素,并返回这个被删除的元素
>>> list4
'关注'

>>> list3
['点赞', '数据STUDIO', '未点赞']

>>> list3.pop() # 默认删除最后一个元素
'未点赞'

>>> list3
['点赞', '数据STUDIO']

remove()

当你不知道要删除元素的索引值的时候,可以通过这个进行删除。

用于移除列表中某个值的第一个匹配项,若列表有多个匹配值,只会删除第一个,要想多次删除,需要用到循环语句。

代码语言:javascript
复制
>>> list5 = ['点赞', '未关注', '数据STUDIO', '关注']
>>> list5.remove("未关注")
>>> list5
['点赞', '数据STUDIO', '关注']

三种查询方法

包括元素出现的位置与元素出现的次数


index()

list.index(x[, start[, end]]) 获得某个元素首次出现的索引,结束索引取不到

  • x-- 查找的对象。
  • start-- 可选,查找的起始位置。
  • end-- 可选,查找的结束位置。
代码语言:javascript
复制
>>> list1 = ['I', 'L', 'O', 'V', 'E', '数', '据', 'S', 'T', 'U', 'D', 'I', 'O']
# 返回指定元素第一次出现的索引
>>> list1.index("O")   
2

# 指定范围内查找
>>> list1.index("I",-4,-1) 
11

# 找不到,直接报错
>>> list1.index("O",-4,-1) 
--------------------------------------------------
ValueError        Traceback (most recent call last)
<ipython-input-11-bc2459127559> in <module>
----> 1 list1.index("O",-4,-1)

ValueError: 'O' is not in list

count()

列表.count(寻找的对象) 获得某个元素出现次数。

代码语言:javascript
复制
>>> list1 = ['I', 'L', 'O', 'V', 'E', '数', '据', 'S', 'T', 'U', 'D', 'I', 'O']
>>> list1.count("O")
2

两种排序方法


list.sort(cmp=None, key=None, reverse=False) 降序和升序排列。

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

此方法会将列表按特定顺序重新排列括号内的参数可以不写,默认升序排列reverse的英文意思是翻转,如果填写了reverse=True就意味着列表会降序排列。

代码语言:javascript
复制
>>> list1 = [1, 9, 7, 6, 5, 8, 6, 8]
>>> list1.sort()
>>>list1         # 默认进行升序
[1, 5, 6, 6, 7, 8, 8, 9]

>>> list1.sort(reverse=True)    # reverse=True就是降序
>>> list1
[9, 8, 8, 7, 6, 6, 5, 1]

>>> list2 = ['I', 'L', 'O', 'V', 'E', '数', '据', 'S', 'T', 'U', 'D', 'I', 'O']
>>> list2.sort()
>>> list2
['D', 'E', 'I', 'I', 'L', 'O', 'O', 'S', 'T', 'U', 'V', '据', '数']

 # 不同的数据类型之间没有某种维度上的大小比较,至少是同一种数据类型
>>> list3 = [5,2,0, '数', '据', 'S', 'T', 'U', 'D', 'I', 'O']
>>> list3.sort()

------------------------------------------------------
TypeError            Traceback (most recent call last)
<ipython-input-14-ce08a1369e13> in <module>
      1 list3 = [5,2,0, '数', '据', 'S', 'T', 'U', 'D', 'I', 'O']
----> 2 list3.sort()

TypeError: '<' not supported between instances of 'str' and 'int'

通过指定列表中的元素排序来输出列表:

代码语言:javascript
复制
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
list4 = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
# 指定第二个元素排序
list4.sort(key=takeSecond)
 
# 输出类别
print('排序列表:', list4)
[(4, 1), (2, 2), (1, 3), (3, 4)]

reverse()

列表.reverse()将list所有元素反转

代码语言:javascript
复制
>>> list4 = ['life', 'is', 'short', 'I', 'use', 'python', 1, 2, 3]
# 不改变原列表
>>> list4[::-1]
[3, 2, 1, 'python', 'use', 'I', 'short', 'is', 'life']

# 直接改变原列表
>>> list4.reverse()  
>>> list4
[3, 2, 1, 'python', 'use', 'I', 'short', 'is', 'life']
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 列表的定义
    • list()
      • 使用list()将其他可迭代的数据类型转换为列表
      • 使用 [ ] 来定义
  • 列表的运算
    • +号运算
      • *号运算
        • in 包含运算
        • 索引和切片
          • 一维列表的切片和索引
            • 多维列表的切片和索引
            • 列表元素的修改
            • 列表对象的常用方法
              • 三个增加方法
                • append 追加
                • extend 扩展
                • insert 插入
              • 四种删除方法
                • del
                • clear()
                • pop()
                • remove()
              • 三种查询方法
                • index()
                • count()
              • 两种排序方法
                • reverse()
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档