Python基础篇-列表和元组

2016-08-31 · 🙈Ray · 0条 · 293次

列表

列表的内容是可以改变的,而且python提供了很多专门的、有用的方法。

>_ list函数

像字符串等序列不能像列表一样被修改,所以可以把他们转为列表。可以使用list函数。例:>>> list("hello")

['h', 'e', 'l', 'l', 'o']

List函数适用于所有类型的序列,不只字符串。List其实是一种类型而不是函数。

可以使用’’.join(somelist)来将由字符组成的列表转为字符串。

>_ 基本的列表操作

注意:并不是所有的列表方法都真正地改变列表。

1. 改变列表:元素赋值

使用索引标记来为某个特定的元素赋值,不能为不存在的元素赋值。例:>>> x[2]=1

2. 删除元素

使用del语句来删除元素。例:

>>> seq=['1','2','3','4']

>>> del seq[1]

>>> seq

['1', '3', '4']

>>> num = [1,2,3,4,5]

>>> num

[1, 2, 3, 4, 5]

>>> del num[1:4:2]

>>> num

[1, 3, 5]

3. 分片赋值

分片赋值的时候可以使用与原分片序列不等长的序列来替换。

>>> name = list("perl")

>>> name

['p', 'e', 'r', 'l']

>>> name[1:]=list("ython")

>>> name

['p', 'y', 't', 'h', 'o', 'n']

在不替换任何原有元素的条件下插入新元素,例:

>>> num = [1,5]

>>> num

[1, 5]

>>> num[1:1]=[2,3,4]

>>> num

[1, 2, 3, 4, 5]

通过分片赋值来删除元素,例:

>>> num

[1, 4, 5]

>>> num[1:3] = []

>>> num

[1]

>_ 列表方法

方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象。调用方法:对象.方法(参数)

1. append()方法

用于在末尾追加新的对象。例:

>>> num

[1, 3, 5]

>>> num.append(1)

>>> num

[1, 3, 5, 1]

append方法并不是简单地返回一个修改过的新列表,而是直接修改原来的列表。

2. count()

统计某个元素在列表中出现的次数。例:

>>> num

[1, 3, 5, 1]

>>> num.count(1)

2

3. extend()

可以在列表的末尾一次性追加另一个序列中的多个值,可以用新列表去扩展原有的列表。例:

>>> a = [1,2,3,4]

>>> b = [5,6,7,8]

>>> a.extend(b)

>>> a

[1, 2, 3, 4, 5, 6, 7, 8]

原始的连接操作(使用+号进行列表的连接)是返回一个全新的列表,原列表并没有发生变化。extend方法则是修改了被扩展的列表。

4. index()

用于从列表中找出某个值第一个匹配项的索引位置,如果找不到,会返回异常。

5. insert()

用于将对象插入到列表中。例:

>>> a = [1,2,4,5,6]

>>> a.insert(3, 'three')

>>> a

[1, 2, 4, 'three', 5, 6]

6. pop()

pop方法会移除列表中的一个元素(默认是最后一个),并返回该元素的值。

>>> a

[1, 2, 4, 'three', 5, 6]

>>> a.pop()

6

>>> a

[1, 2, 4, 'three', 5]

pop方法是唯一一个既可以修改列表又可以返回元素值(除了None)的列表方法。

实现了栈,后进先出。pop是出栈操作,入栈(push)python并没有提供,但可以用append方法实现。

》》》特别地,对于先进先出队列,可以使用insert(0, )和pop来实现,当然也可以使用append和 pop(0)来实现。但是,更好的解决方法是使用collection模块中的deque对象。

7. remove()

用于移除列表中某个值的第一个匹配项。例:

>>> a

[1, 2, 4, 'three', 5]

>>> a.remove(2)

>>> a

[1, 4, 'three', 5]

只有第一次出现的值会被移除,而且如果移除的值不在列表中,会报错。该方法改变了列表,但没有返回值。pop方法改变了列表,并且有返回值,返回了被移除的值。

8. reverse()

该方法将列表中的元素反向存放。

>>> a

[1, 4, 'three', 5]

>>> a.reverse()

>>> a

[5, 'three', 4, 1]

该方法改变了列表,但不返回值。

如果需要对序列进行反向迭代,可以使用reversed函数。该函数并不返回列表,而是一个迭代器(iterator)对象。但是可以使用list对象把返回的对象转换成列表。例:

>>> a

[5, 'three', 4, 1]

>>> list(reversed(a))

[1, 4, 'three', 5]

9. sort()

该方法用于在原位置对列表进行排序,意味着要改变原来的列表。例:

>>> a = [2,1,4,3,634,23]

>>> a.sort()

>>> a

[1, 2, 3, 4, 23, 634]

因为sort()方法改变了原列表,如果用户想要保留原列表,并得到排序后的列表的话,可以将列表的副本赋值给另一个列表,然后对新列表进行排序。如:

>>> a = [2,1,4,3,634,23]

>>> a

[2, 1, 4, 3, 634, 23]

>>> b = a[:]

>>> b

[2, 1, 4, 3, 634, 23]

>>> b.sort()

>>> b

[1, 2, 3, 4, 23, 634]

>>> a

[2, 1, 4, 3, 634, 23]

这样是合理的,但是不要使用b = a这种方式来赋值,这样是把a和b指向了同一个列表。会得到如下结果:

>>> a

[2, 1, 4, 3, 634, 23]

>>> b = a

>>> b

[2, 1, 4, 3, 634, 23]

>>> b.sort()

>>> b

[1, 2, 3, 4, 23, 634]

>>> a

[1, 2, 3, 4, 23, 634]

另外一种获取已排序列表副本的方式使用sorted()函数。不改变原列表。如:

>>> a

[2, 1, 4, 3, 634, 23]

>>> b = sorted(a)

>>> b

[1, 2, 3, 4, 23, 634]

>>> a

[2, 1, 4, 3, 634, 23]

这个函数实际上可以应用于任何序列(任何可迭代的对象),却总是返回一个列表。例:

>>> a = 'python'

>>> sorted(a)

['h', 'n', 'o', 'p', 't', 'y']

>_ 高级排序

如果希望元素能够按照特定的方式进行排序,可以通过compare(x,y)的形式自定义比较函数。compare(x,y)函数会在x<y的情况下返回复数,x>y时返回正数,如果x=y则会返回0.定义好该函数后,就可以提供给sort方法作为参数了,实现了升序排序。比较函数的默认实现方式就是通过cmp内建函数实现的。本来想举个例子,cmp函数在3里已经取消了。Gone,gone,gone了。

sort()方法有两外两个可选参数,key和reverse。要使用它们,需要使用名字来指定,因此叫关键字参数。

key必须提供一个在排序中使用的函数。这个函数并不是直接用来确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。例:

>>> x = ["520","1314","i love you ","liupeng","really"]

>>> x.sort(key = len)

>>> x

['520', '1314', 'really', 'liupeng', 'i love you ']

该例是使用字符串长度作为键值进行排序。

reverse是简单的布尔值,指明是否要反向排序。True是反向,False是升序。

>>> x = [1,2,32,3542,45,32]

>>> x.sort(reverse = False)

>>> x

[1, 2, 32, 32, 45, 3542]

>>> x.sort(reverse = True)

>>> x

[3542, 45, 32, 32, 2, 1]

Key和reverse可以用于sorted函数,在多数情况下,为key提供自定义函数是非常有用的。

元组

元组是不可变序列,意味着元组是不能修改的,字符串也不可以修改。(书上作者说,元组没有像列表一样的方法,不要问他为什么。第一次见这么傲娇的作者,我喜欢!哈哈哈哈)

创建元组的方法就是用,(逗号)去分割一些值。元组大部分时候是通过小括号括起来的。空元组可以用没有任何内容的圆括号表示。例:

>>> 1,2,3

(1, 2, 3)

>>> (1,2,3)

(1, 2, 3)

>>> ()

()

要实现只有一个值的元组,必须要有个逗号。

>>> (1,) #元组

(1,)

>>> (1) #不是元组

1

>_ tuple

tuple可以将一个序列作为参数,将其转换为元组。如果参数为元组,那么该参数会原样返回。例:

>>> tuple("123456")

('1', '2', '3', '4', '5', '6')

>>> tuple((1,2,3,4))

(1, 2, 3, 4)

tuple同list类似,都不是函数,而是类型。

元组的分片还是元组,就像列表的分片还是列表。

元组不可替代的两个重要原因:①元组可以在映射(和集合的成员中)当做键使用——而列表不行。②元组作为很多内建函数和方法的返回值存在,与python内部的运作方式有关。


  0