python 数据结构与算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baishengxu/article/details/80214237

1.Python内置数据结构

(1)list

  • python 的list是一个有序队列,list的元素可以包含“数字,字符、list、dict”等数据类型,是一种可变的,不可hash的线性数据结构
  • list的定义方式:
list=list() #定义一个空的list

list=[] #定义一个空list

list=['1',1,2,3] #定义一个list的内容

list=list(range(100)) #迭代对象
  • list的索引:
    1. 正向索引:索引从0开始,从头开始
    2. 反向索引:索引从-1开始,从列表尾部开始
#!/usr/bin/python
# -*- coding: utf-8 -*-
list=list(range(10))
print(list) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list[0]) #0
print(list[-1]) #9
print(list[-2]) #8

 
  • list的遍历:
#!/usr/bin/python
# -*- coding: utf-8 -*-
list=list(range(5))
# 方法1
print ('遍历列表方法1:')
for i in list:
    print("序号:%s   值:%s" % (list.index(i), i))

# 方法2
print ('\n遍历列表方法2:')
for i in range(len(list)):
    print("序号:%s   值:%s" % (i, list[i]))

# 方法3
print ('\n遍历列表方法3:')
for i, val in enumerate(list):
    print("序号:%s   值:%s" % (i, val))
遍历列表方法1:
序号:0   值:0
序号:1   值:1
序号:2   值:2
序号:3   值:3
序号:4   值:4

遍历列表方法2:
序号:0   值:0
序号:1   值:1
序号:2   值:2
序号:3   值:3
序号:4   值:4

遍历列表方法3:
序号:0   值:0
序号:1   值:1
序号:2   值:2
序号:3   值:3
序号:4   值:4
index方法:列表索引,通过值查找在列表中的索引位置,有多个相同值时仅返回找到的第一个值的索引,可以定义查找的起始和结束位置。
list.index(value,start,stop) #stop的值可以超出列表长度 起始位置为负数则是倒序查询
# -*- coding: utf-8 -*-
list=[1,2,3,4,5,2]
print(list.index(3,2,10)) # 5
count方法:查找列表中值的个数
# -*- coding: utf-8 -*-
list=[1,2,3,2,5,2]
print(list.count(2)) # 3
  • list的各个操作
  1. count方法:查找列表中值的个数
list=[2,3,4,6,2,8,3,1,2]
print(list.count(3)) # 2

    2. len计算数据类型的长度:属于内置函数,它可以计算元组,列表,字符串等数据类型的长度

list=[1,2,3,4,5]
print(len(list)) # 5

    3. append:列表追加元素,从列表尾部追加,速度快,O(1)

list=[1,2,3]
list.append(4)
print(list) #[1,2,3,4]

    4. inster:指定索引处插入元素(对象)

# -*- coding: utf-8 -*-
list=[1,2,3,4]
list.insert(1,1)
print(list)#[1,1,2,3,4]

    5.extend:扩展可迭代对象

list1=[1,2,3] 
list2=[4,5]
list1.extend(lst2)
print(list1) #[1, 2, 3, 4, 5]

    

    6.remove:根据值删除元素,一次删除一个值,多个值是要删除多次

list=[1,2,3]
list.remove(3)
print(list) # [1,2]

    7.pop:通过指定索引删除值并返回删除的值,不指定索引则是删除列表的最后一个元素并返回剩下的值

list=[1,2,3,4]
print(list.pop(2)) # 3
print(list.pop()) # 4

    8.clear:清空整个列表元素

    9.sort:排序

list=[2,1,3,4]
list.sort(reverse=True) #reverse=True为降序,reverse=False为升序
list=['a','b',c'','d'].sort()#对字符串排序,根据ASCII码排序

    10.copy:列表的复制,浅复制又叫shadow copy,列表中嵌套可变数据类型(如列表)时 该列表是添加了 子列表的地址引用(子列表分配了独立的内存空间)而非正在的列表数据。深复制需要import copy模块 copy模块提供了deepcopy方法,该方法会去递归复制可变对象的每一个的值。

# -*- coding: utf-8 -*-
import copy
list=[1,2,[9,0,40],4]
list1=list.copy() #浅复制 只copy list[2]的引用,如果修改了list,copy的list1的子列表list1[2]的值也会随着改变
print(list1)
list2=list.copy.deepcopy()#深复制,该方法会递归复制每一个值,修改list之后list2[2]的值不会随着改变
print(list2)
list[2][0]=100
print(list1)#[1,2,[100,0,40],4]
print(list2)#[1,2,[9,0,40],4]
  • list各个操作的时间复杂度:

   Python的list的insert(0,value)要比append(value)的操作时间大得多,原因是list中的元素保存在一片连续的内存区域中,这样的话只有知道元素索引就能确定元素的内存位置,从而直接取出该位置上的值,但是它的缺点在于前插需要移动元素,而且随着list中元素的增多需要移动的元素也就越多,花费的时间也就自然多了。

 

猜你喜欢

转载自blog.csdn.net/baishengxu/article/details/80214237
今日推荐