以前的文章里咱们已经讲过了数字和字符串,它们是两种很基本的对象,今天要学的 list 也是一种对象,它在 Python 中具备很是强大的功能。java
在 Python 中,列表用一对方括号 -- [] 表示,在方括号里你能够数字,字符串也能够是其余对象,甚至能够是多种不一样的对象。除此之外,列表中元素的个数能够无限大,固然这是理想状态,咱们总仍是要看硬件设备的脸色行事。python
>>> a = []
>>> a
[]
>>> b = ['1',2,'abcd']
>>> b
['1', 2, 'abcd']
>>> c = [1,'asd',[1,2,3]]
>>> c
[1, 'asd', [1, 2, 3]]
复制代码
还记得什么是索引和切片吗?若是忘记了,请回头去看这篇文章 -- 零基础学习 Python 之字符串 。c++
列表和字符串同样,都是序列,列表里的元素也是有顺序的,因此也是有索引和切片的,看看下面的例子就明白了。c#
>>> a = [1,'2','rocky']
>>> a[0]
1
>>> a[1]
'2'
>>> a[:3]
[1, '2', 'rocky']
>>> a[1:3]
['2', 'rocky']
>>> a[2][0:3]
'roc'
复制代码
由上面的例子咱们能够看出来,其实列表里的索引和序列与字符串里的是同样的,咱们彻底能够把以前在字符串中的理解照搬过来,因此列表也能够从右向左编号,依次是 -1,-2,-3...可是若是要是切片的话,这里要注意了,请看下面的例子:bash
>>> str = ['abc','bcd','123']
>>> str[-3:-1]
['abc', 'bcd']
>>> str[-1:-3]
[]
复制代码
看明白了吗?序列都是从左向右排,无论你的下标是正的仍是负的都是这个规律。app
固然了序列里还能够跳步,其实它的完整的写法是 list[start:end:step],默认step = 1 。函数
>>> str = [1,2,3,4,5,6,7,8]
>>> str[::2]
[1, 3, 5, 7]
复制代码
在这里再多补充一点, step 也是能够等于负数的,str[::-1] 表示的是从列表的右边看这个列表,而后按照 step = 1 去列表中的元素,固然 step 还能够等于 -2,-3,具体是多少看到时候看心情。学习
>>> str = [1,2,3,4,5,6,7,8]
>>> str[::-1]
[8, 7, 6, 5, 4, 3, 2, 1]
>>> str[::-2]
[8, 6, 4, 2]
复制代码
列表是序列,但凡是序列都有基本的几种操做,好比在字符串的时候咱们就讲过它的几种操做,列表的基本操做和字符串的差很少,在这基础上,列表还有其独特的操做,对于基本操做,好比链接操做等我在这里就不讲了,忘记的能够求看前面的文章,我在这里只是说一下列表独特的操做。spa
列表与字符串一个很大的不一样是,字符串不可修改,可是列表能够修改。code
>>> str = ['python','c++','java']
>>> str[0] = 'c#'
>>> str
['c#', 'c++', 'java']
>>> name = 'rocky'
>>> name[0] = 'R'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
复制代码
其次,除了能够修改元素之外,列表还能够继续给本身添加元素,可是不是说列表随即可以给本身加戏,必需要用 append() 方法向列表中追加元素,追加到末尾。
>>> str = ['python','c++','java']
>>> str[3] = 'c#'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> str.append('c#')
>>> str
['python', 'c++', 'java', 'c#']
复制代码
做为 Python 中出了名的苦哈哈,它必然有不少的函数去实现功能,感兴趣的朋友们能够用 dir(list) 查看,我在这里主要说一下那些常常用到的。
1.append:这个其实咱们在昨天的文章 ( 零基础学习 Python 之列表 ( 一 ) )中说过,它执行的结果就是将某个元素加入到一个一直列表的最右边。
>>> str = [1,2,3,4,5]
>>> str.append(6)
>>> str
[1, 2, 3, 4, 5, 6]
复制代码
2.extend:官方的说法是从可迭代的对象那里获取元素,将它们追加到已知的列表中,从而达到扩充的目的,其实就是可以将两个列表合并。
>>> str = [1,2,3,4,5]
>>> str1 = ['abc','def']
>>> str.extend(str1)
>>> str
[1, 2, 3, 4, 5, 'abc', 'def']
复制代码
3.count:这是一个能够帮咱们搞清楚列表中的元素重复出现次数的方法。
>>> a = [1,2,3,4,5,1,2,3]
>>> a.count(1)
2
>>> a.append('a')
>>> a.append('a')
>>> a
[1, 2, 3, 4, 5, 1, 2, 3, 'a', 'a']
>>> a.count('a')
2
>>> a.count('b')
0
复制代码
4.index:该函数可以查到你想查的函数在列表中第一次出现的位置,比起以前的文章咱们说的索引,这个才是真真正正的索引。
>>> a = [1,2,3,4,'abc','def']
>>> a.index(2)
1
复制代码
5.insert:这个厉害了,以前在 1 和 2 中咱们说的 append 和 extend 只是能在列表的最右添加元素,而 insert 能够在列表的任意位置增长一个元素。
>>> a = [1,2,3,4,'abc','def']
>>> a.insert(0,'rocky')
>>> a
['rocky', 1, 2, 3, 4, 'abc', 'def']
复制代码
6.remove & pop:列表中的元素不光可以增长元素,还能够删除元素, remove() 和 pop() 就是列表用来删除元素的函数。romove() 函数删除元素首先这个元素必需要存在,其次它是在原列表上进行删除,当列表中有重复元素的时候,只删除第 1 个。
>>> a = [1,2,3,4,1]
>>> a.remove(1)
>>> a
[2, 3, 4, 1]
>>> a.remove('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
复制代码
pop() 函数若是填写删除元素的索引的话,那么就是删除该元素,若是没有制定删除元素的索引,则删除列表的最后一个元素,而且 pop() 函数有返回值,返回的就是删除的那个元素。
>>> a = [1,2,3,4,1]
>>> a.pop(1)
2
>>> a.pop()
1
>>> a
[1, 3, 4]
复制代码
7.reverse:这个函数很简单,就是直接把列表的元素顺序反过来。
>>> a = [1,2,3,4,1]
>>> a.reverse()
>>> a
[1, 4, 3, 2, 1]
复制代码
8.sort:这个函数是对列表进行排序,默认是递增排序,经过改变默认参数 reverse 的值能够实现递减排序。
>>> a = ['c','d','a','k']
>>> a.sort()
>>> a
['a', 'c', 'd', 'k']
>>> a.sort(reverse = True)
>>> a
['k', 'd', 'c', 'a']
复制代码
列表和字符串这两种对象类型有不少类似的地方,也有很大的区别,在这里简单比较一下,也算是对前面所学的一个复习。
相同点:
1.二者都是序列类型,均可以从左向右(从左向右),依次用 0,1,2...(-1,-2,-3...)表示,经过这样的方式创建索引,一样能够用切片的方法获得 一个或多个元素。
2.对于序列的基本操做来讲,两者都适用,好比链接操做等,还有像 len() 这一类的函数也都是适用的。
不一样点:
1.字符串和列表的最大区别就是:列表的可变的,可是字符串是不可变的。咱们在上面讲到的列表函数,诸如 append(),insert(),pop() 等对字符串来讲都是不适用的。
2.元素的包裹性,这是我本身想的一个词,可能不太贴切。字符串里的每一个元素都只是字符,而列表里的元素能够是其它任何的诸如数字,字符串,列表等对象类型。
到这里,列表差很少就写完了,列表虽然是苦哈哈,但先让它作这些事情把,显得咱们比较仁义点。。
更多内容,欢迎关注公众号「Python空间」,期待和你的交流。