目录
1、列表的定义
序列是python中最基本的数据结构,序列都可以使用索引来查询它的元素。列表就是序列的一种。
序列可以进行的操作包含:索引、切片、加、乘,检查成员还可以使用len()方法,以及max()和min()方法
- 列表(list)是处理一组有序项目的数据结构
- 列表中可以支持各种数据类型,例如字符,数字,字符串甚至可以嵌套列表,元组,字典等
- 列表用[]标示,内部元素用,隔开。
2、列表的创建
2.1、创建普通列表
示例:
>>> list1=[]
>>> print(list1)
[]
>>> list2=[1,2,3,"a",(1,2,3,4),[1,2,3],{2:2}]
>>> print(list2)
[1, 2, 3, 'a', (1, 2, 3, 4), [1, 2, 3], {2: 2}]
>>>
2.2、利用range创建列表
range()函数是一个迭代器,不能使用list中的属性,如果想要转换成list,需要转化下。
注意事项:range是[)左闭右开区间。
示例:
>>> a=list(range(1,10,2))
>>> a
[1, 3, 5, 7, 9]
>>>
2.3、列表的复制功能
2.31、引用复制
引用复制就是指的是两个列表的地址是同样的,改变其中一个的内容,另一个会相应的进行改变。
因为引用复制,是指向的是内存中的同一个地址。
示例:
>>> a
[1, 3, 5, 7, 9]
>>> b=a
>>> id(a)
2486756193864
>>> id(b)
2486756193864
>>> a.append("a")
>>> a
[1, 3, 5, 7, 9, 'a']
>>> b
[1, 3, 5, 7, 9, 'a']
>>> id(a)
2486756193864
>>> id(b)
2486756193864
>>>
2.32、非引用复制
非引用复制功能,是利用切片进行复制,两个列表的地址是不一样的,所以修改其中的一个列表中的值,另一个列表中的值不发生改变。
示例:
>>> a
[1, 3, 5, 7, 9, 'a']
>>> c=a[:]
>>> id(a)
2486756193864
>>> id(c)
2486756178056
>>> a.append("hello")
>>> a
[1, 3, 5, 7, 9, 'a', 'hello']
>>> c
[1, 3, 5, 7, 9, 'a']
>>> id(a)
2486756193864
>>> id(c)
2486756178056
>>>
2.4、增加列表元素
2.41、append()方法
- 在列表的末尾增加元素,输入啥就增加啥,如果append元素是字典,也是将整个字典当为一个元素加进列表的末端。
示例:
>>> a=[1,2,3,4,5]
>>> a.append([1,23])
>>> a
[1, 2, 3, 4, 5, [1, 23]]
>>>
2.42、extend()方法
- extend只能接受序列,且把这个序列中的每个元素都添加到原list中取去。
示例:
>>> a
[1, 2, 3, 4, 5, [1, 23]]
>>> a.extend(("a","b","c"))
>>> a
[1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>>
2.43、insert()方法
- insert()方法是指定的对象插入列表的指定位置。
示例:
>>> a
[1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>> a.insert(0,"hello")
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>>
2.5、删除列表元素
2.51、pop()方法
- pop()函数是用于移除列表中的一个元素,当不填写索引值的时候,默认取出列表中的最后一个元素,然后在列表中去掉。返回值是取出的那个元素对象。
示例:
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>> a.pop()
'c'
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b']
>>> a.pop()
'b'
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a']
>>> a.pop(1)
1
>>> a
['hello', 2, 3, 4, 5, [1, 23], 'a']
>>>
2.52、del()方法
- 删除整个列表 :del 列表名称
- 删除列表中的某个元素: del 列表[索引值]或者是切片形式。
示例:
>>> a
['hello', 2, 3, 4, 5, [1, 23], 'a']
>>> del a #删除整个列表
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> b=[1,2,3,4,5,6]
>>> del b[1:4] #删除列表的固定区域的元素
>>> b
[1, 5, 6]
>>>
2.53、remove()方法
- remove()函数用于移除列表中某个值的第一个匹配项
示例:
>>> b=[1,2,3,"a","bc",(1,2,4)]
>>> b.remove(3)
>>> b
[1, 2, 'a', 'bc', (1, 2, 4)]
>>> b.remove("bc")
>>> b
[1, 2, 'a', (1, 2, 4)]
>>>
2.54、clear()方法
- clear()函数用于清空列表,相当于del a[:]
示例:
>>> a=[1,2,3,4,5]
>>> a.clear()
>>> a
[]
>>>
3、列表常用函数和方法
3.1、len(): 查看列表中元素的个数
示例:
>>> a=[1,2,3,4,5,"a"]
>>> len(a)
6
>>>
3.2、split():字符串切换成列表
拆分字符串,通过指定的分隔符对字符串进行切片,并返回分割后的字符串列表。
语法:
字符串.split(str="",num)[n]
- str:表示分隔符,默认为空格,但是不能为空("")。若是字符串中没有分隔符,则把整个字符串作为列表中的一个元素。
- num:表示分割次数,如果存在参数num,则仅仅分割num+1个子字符串,并且每个字符串可以赋予新的变量。
- [n]:表示选取的切片值。
示例1:默认分隔符:空格
>>> a="i am a good boy"
>>> a.split()
['i', 'am', 'a', 'good', 'boy']
>>>
示例2:使用分隔符:“.”
>>> s="www.beta.pool.btc.com"
>>> s.split(".")
['www', 'beta', 'pool', 'btc', 'com']
>>>
示例3:分割次数示例
>>> s
'www.beta.pool.btc.com'
>>> s.split(".",2)
['www', 'beta', 'pool.btc.com']
>>>
3.3、reverse():反向列表元素
方法1:reverse()
方法2:切片[::-1]
示例:
>>> s
'www.beta.pool.btc.com'
>>> c=s.split(".")
>>> c.reverse()
>>> c
['com', 'btc', 'pool', 'beta', 'www']
>>>
3.4、count():统计某个元素出现的次数。
示例:
>>> c=[1,2,3,4,2,3,4,4,]
>>> c.count(4)
3
>>> c.count("a")
0
>>>
3.5、sort() :对原列表进行排序
对原列表进行排序,根据ascii码从大到小进行排序,也可以直接在序列上进行排序,没有返回值。
语法:
L.sort(key=None,reverse=False)
- key:也是一个函数,这个函数会从每一个元素中提取一个用于比较的关键字。默认为none
- reverse:False:顺序,True:逆序
注意事项:
注意语法中"key=" 是不能缺少的,这个key可以是一个函数。
示例1:按照序列的长度进行倒叙排列
list1=[(1,2,3),(1,2,3,5),(1,2,4,3,2,4,3,4,5,6,3),(4,)]
def L(tup):
return len(tup)
list1.sort(key=L,reverse=True)
print(list1)
结果:
============================== RESTART: E:\a.py ==============================
[(1, 2, 4, 3, 2, 4, 3, 4, 5, 6, 3), (1, 2, 3, 5), (1, 2, 3), (4,)]
>>>
示例2:找出下面英文句子中最长的单词:S=“I am a good boy! hi, glory road”
#coding=utf-8
import string
s="I am a good boy! hi,glory road"
#result:是将单词中带的标点符号,转换为空格
result=""
for i in s:
if i in string.punctuation:
result+=" "
else:
result+=i
#将字符串中的单词都放在list中
word_list=result.split(" ")
#利用列表的sort函数进行排序
word_list.sort(key=lambda x :len(x),reverse=True)
print("最长的单词为:",word_list[0])
结果:
============================== RESTART: E:\a.py ==============================
最长的单词为: glory
>>>
3.6、sorted()函数
sorted函数和sort函数对于列表最大的不同就是:
1)sorted函数是重新生成一个列表,不改变原来的列表,sorted可以用于一切可迭代的对象、
2)sort函数是在原有的序列中进行排序功能,仅仅只有list有sort函数功能
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> c=sorted(a)
>>> c
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> c=sorted(a)
>>> c
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>>
3.7、推导列表
推导列表本质上是把列表推导式理解成一个集合了变换和筛选功能的函数,听过这个函数把一个列表转换成一个新的列表,是生成了另一个列表,原来列表保持不变。
语法:
[表达式 for 变量 in 列表] 或者[表达式 for 变量 in 列表 if 条件 ]
示例1:列表元素平方
>>> a
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> print([x**2 for x in a if x>0])
[1, 4, 9, 25, 900]
>>>
示例2:二维矩阵的转置:a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> print([[j[i] for j in a]for i in range(3)])
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
>>>
思路解析:
原来列表的顺序为:
[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
共有4行,此时要转为3行,所以程序中有个for i in range(3),i也代表原列表中的列的个数
接着查看每行的内容是什么,应该是元列表中每列的第i个元素组成的列表,成为新的元素。
怎么取到的,就是 j[i] for j in a, j相当于原来列表中的每行内容。
举例说明:
当i=0时, j[0] -->1,4,7,10 取每一行的第0个元素组成新的列表。
当i=1是 j[1] -->2,5,8,11 取每一行的第1个元素组成新的列表。