• 列表的内容是可变的
  • 列表元素用方括号[]括起来

list函数:将其他序列类型转换为列表

In [1]:
list("Hello")
Out[1]:
['H', 'e', 'l', 'l', 'o']

基本的序列操作

In [2]:
numbers = list('0123456789')
In [3]:
numbers
Out[3]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
In [4]:
#改变列表,赋值
numbers[3] = 'x'
In [5]:
numbers
Out[5]:
['0', '1', '2', 'x', '4', '5', '6', '7', '8', '9']
In [6]:
#删除元素
del numbers[3]
In [7]:
numbers
Out[7]:
['0', '1', '2', '4', '5', '6', '7', '8', '9']
In [8]:
#分片赋值
numbers[3:] = list('345678')
In [9]:
numbers
Out[9]:
['0', '1', '2', '3', '4', '5', '6', '7', '8']
In [10]:
#甚至可以扩充列表
numbers[8:] = list('89')
In [11]:
numbers
Out[11]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
In [22]:
#而且还可以插空!
numbers[2:2] = [111111,222222]   #把2后面(含)的数都往后推
In [23]:
numbers
Out[23]:
['0', '1', 111111, 222222, '2', '3', '4', '5', '6', '7', '8', '9']
In [24]:
#甚至甚至可以拿空列表来删除元素!
numbers[2:4] = []
In [25]:
numbers
Out[25]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
In [26]:
#当然上面这些也可以加入步长!!

列表方法

In [27]:
numbers = list('0123456789')
In [28]:
numbers
Out[28]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
In [29]:
#append:在列表末尾追加一个对象,不返回值
numbers.append('a')
In [30]:
numbers
Out[30]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a']
In [31]:
#scount:返回某元素出现的次数
numbers.count('a')
Out[31]:
1
In [39]:
#extend:列表拼接,不返回值
numbers.extend(list('bcd'))
In [40]:
numbers
Out[40]:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd']

对比:用加号+拼接

In [41]:
x = [1, 2, 3]
In [42]:
y = [4, 5, 6]
In [43]:
x + y
Out[43]:
[1, 2, 3, 4, 5, 6]
In [44]:
x
Out[44]:
[1, 2, 3]
In [45]:
y
Out[45]:
[4, 5, 6]

加法返回一个新的列表,而不是在原列表上操作

In [46]:
#index:找出列表中第一个匹配项(值)的对应索引
numbers.index('b')
Out[46]:
11
In [47]:
numbers.index('g')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-47-cc50eb9479de> in <module>()
----> 1 numbers.index('g')

ValueError: 'g' is not in list
In [50]:
#insert:将一个元素插入指定位置,不返回值
In [56]:
x = [0 , 1, 3]
In [57]:
x.insert(2, 'two')
In [58]:
x
Out[58]:
[0, 1, 'two', 3]
In [59]:
#pop:移除一个元素(若不指定索引号,直接移除最后一个),返回被移除的值
In [60]:
x.pop(2)
Out[60]:
'two'
In [61]:
x.pop()
Out[61]:
3

pop方法可以和append方法搭配,实现栈的数据结构

In [62]:
#remove:移除第一个匹配项(值),不返回值
In [65]:
numbers = [0,1,2,3,4,5,6,7,8,9,[1,2]]
In [66]:
numbers
Out[66]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2]]
In [67]:
numbers.remove([1,2])
In [68]:
numbers
Out[68]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [70]:
#reverse:反向存放元素,不返回值
numbers.reverse()
In [71]:
numbers
Out[71]:
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
In [72]:
#sort:排序,不返回值
numbers.sort()
In [73]:
numbers
Out[73]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如果要把排序结果赋给另外一个变量
不能这么做——x=numbers.sort()

  • 1、可以先复制到新变量上,对变量做sort排序
In [74]:
x = [3, 2, 1]
In [75]:
y = x[:]     #常用的列表复制方法
In [76]:
y.sort()
In [77]:
y
Out[77]:
[1, 2, 3]
  • 2、也可以采用sorted函数,该函数返回了结果而不在原列表上作修改
In [78]:
x = [3, 2, 1]
In [79]:
z = sorted(x)
In [80]:
x
Out[80]:
[3, 2, 1]
In [81]:
z
Out[81]:
[1, 2, 3]

sort方法还可以用来实现高级排序,有三个参数cmp, key, reserve

  • cmp参数是提供一个比较的函数,默认使用内建函数cmp进行从小到大排序
  • key参数与cmp类似,但是提供的这个函数不进行直接的比较,而是为每个元素创建一个键,然后根据键来排序,可以使用函数len按元素长度排序
  • reserve参数是指定是否反向排序,只是一个布尔值
    如:x.sort(cmp)
    x.sort(key=len)
    x.sort(reverse=True)
    这些参数也可以用在sorted函数上
In []: