第六章、Python数据类型(list列表)

列表(List)

python中用方括号 [ ] 表示一个list,方括号里面可以是各种数据类型。

>>> a=[1,'q',True]
>>> type(a)
<type 'list'>

 1)列表也有类似字符串一样的索引和切片,方法一样

>>> a=[1,23,2]
>>> a[0]
1
>>> a.index(1)
0

2)反转:字符串倒过来。

反转,不是在“原地”把原来的值倒过来,而是新生成了一个值,那个值跟原来的值相比,是倒过来了,原来的值还存在于变量中

反转有两种方式:

>>> a=[1,23,2]
>>> a[::-1]          #方式一
[2, 23, 1]
>>>a
[1,23,2]
>>> list(reversed(a))   #方式二
[2, 23, 1]

 3)基础操作

>>> a.append("like")       #增加列表元素,追加到尾部
>>> a
[1, 23, 2, 'like']
>>> b=['q', 'w']
>>> a.extend(b)   #b中的所有元素加入到a中
>>> a
[1, 2, 3, 'q', 'w']
>>> b
['q', 'w']

>>> a = "python"
>>> hasattr(a,'__iter__')  
False
>>>b = [1,2]
>>> hasattr(b,'__iter__')  
True
#hasattr()判断一个字符串是否是可迭代的,是返回True,否返回False。其判断本质就是看该类型中是否有__iter__函数。用dir()查询整型、字符串、列表中,谁有__iter__。
>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

#id()函数查看变量在内存的位置编码
>>> id(a)
140571421973464
>>> id(b)
140571377764352

 4)insert(i, x)函数,含义是将元素 x 插入到索引值是 i 的元素前面。索引值是从0开始的。

>>> a=['a','b','c','d']
>>> a.insert(2,'q')
>>> a
['a', 'b', 'q', 'c', 'd']
>>> a.insert(9,'w')
>>> a
['a', 'b', 'q', 'c', 'd', 'w']

注:当 i 的值大于 list 中的最大索引值时,元素 x 自动插入 list 末尾。

5)remove(x)函数,删除列表中的x元素。注:当列表中含有多个不紧邻的x元素时,只删除第一个x元素,若相邻的就一起删除

>>> a=['a', "a",'b', 'c', 'd', 'w']
>>> a.remove('a')
>>> a
['a', 'b', 'c', 'd', 'w']
>>> a=['a','b','a', 'c', 'd', 'w']
>>> a.remove('a')
>>> a
['b', 'a', 'c', 'd', 'w']

6)pop(i)函数,删除指定索引值 i 对应的元素,并将删除结果返回,若不写 i , 默认删除最后一个元素。 

>>> a=['b', 'a', 'c', 'd', 'w']
>>> a.pop()
'w'
>>> a
['b', 'a', 'c', 'd']
>>> a.pop(2)
'c'

7)reverse()函数,将列表反转,等同于 list[ : :-1]

>>> a=['a','b','c']
>>> a.reverse()
>>> a
['c', 'b', 'a']
>>> a[::-1]
['a', 'b', 'c']

8)sort()函数,对原列表进行排序,语法:

list.sort(cmp=None, key=None, reverse=False)   #python 2.x
list.sort( key=None, reverse=False)     #python 3.x

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。默认值None

reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。 

>>> a=['qwe','rty','uiop']
>>> a.sort()
>>> a
['qwe', 'rty', 'uiop']
>>> a.sort(key=len)
>>> a
['qwe', 'rty', 'uiop']
>>> a.sort(key=len,reverse=True)
>>> a
['uiop', 'qwe', 'rty']
>>> b=[45,5,7,3]
>>> b.sort()
>>> b
[3, 5, 7, 45]

此外,还有一个内置函数sorted()用于排序

sorted(iterable, cmp=None, key=None, reverse=False)        #python 2.x
  sorted(iterable, key=None, reverse=False)          #python 3.x
 注:两函数的的区别是, sort( )函数时是在原列表上进行排序,无返回值;而sorted( )函数是返回一个新的list,不在原来的list上进行操作,调用其返回一个排好序的list。
>>> b
[3, 5, 7, 45]
>>> c=sorted(b)
>>> c
[3, 5, 7, 45]

 9)split()函数,指定分隔符对字符串进行分割,分割后的字符串以逗号“,”隔开。

语法:str.split(str="", num=string.count(str))

  • str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num -- 分割次数。分隔出 num+1 个子字符串,默认为 -1, 即分隔所有。
>>> a="hello world to you"
>>> a.split()
['hello', 'world', 'to', 'you']
>>> a
'hello world to you'
>>> a.split(" ",1)
['hello', 'world to you']
>>> a.split(" ",2)
['hello', 'world', 'to you']

10)join() 函数用于将序列中的元素以指定的字符连接生成一个新的字符串。

语法:str.join(sequence)  

str:指定字符      sequence:序列名

>>> a,b=(1,2,3,4,5),['a','b','c','d']
>>> "".join(b)
'abcd'
>>> "".join(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> print(" ".join('%s' %id for id in a))
1 2 3 4 5
>>> " ".join('%s' %id for id in a)
'1 2 3 4 5' 

注:若序列中元素包含数字,则join()会报错。需遍历序列中元素,将之转化成字符串。这样就能成功输出数字结果。

11)remove()函数,删除列表中的某个元素

>>> b=[1,2,3]
>>> b.remove(2)
>>> b
[1, 3]

Python的序列类型:字符串、列表、元组

上一篇:6-1 单链表逆转


下一篇:Leetcode--Java--189. 旋转数组