Python数据结构学习

注:本片文章是我的学习总结,内容来自《简明Python教程》php

List 有序列表

List是一种保存有序项的数据结构。python

项目列表应该使用方括号扩起来,以便 Python 可以理解您正在定义一个列表。一旦建立了列表,你就能够在列表中增长,删除或者搜索列表中的项 。 正由于咱们能够增长和删除项,因此咱们称列表是一种 可变 数据类型,也就是说这个类型能够被改变。安全

shoplist = ['apple','mango','carrot','banana']

<!--获取长度-->
len(shoplist)  //4

<!--遍历list-->
for item in shoplist:
    print(item)

<!--添加元素-->
shoplist.append('rice')

<!--list排序-->
shoplist.sort()

<!--赋值-->
shoplist[0] = 'Google'

<!--删除元素-->
del shoplist[1]

元组tuple

元组用于将多个对象组合在一块儿。能够将它们近似看做列表,可是没有列表类提供的许多功能。元组的一个重要特征是,它们和字符串同样是 不可变的 ,即你不能修改元组。ruby

元组是由一些特殊的项定义的,这些项在一对可选的圆括号中,由逗号隔开。数据结构

元组一般用于这种状况,也就是语句或者用户自定义的函数能够安全地认为值的集合(即,值的元组)不会改变的状况。app

<!--元组一旦定义后就不能在进行增删修改-->

zoo = ('Python','Java','JavaScript','php')
==注意:包含0或1个项的元组==

一个空的元组是由一堆空的圆括号组成的,例如,myempty = ().函数

可是对于一个项的元组且必须仅在第一个项的后面用一个括号来指定该元组,好比oop

myempty = (1,),由于由于若是没有逗号会形成歧义: a = (1)学习

>>> a = 2
>>> b = (a,11,22)
>>> b
(2, 11, 22)
>>> a = 3
>>> b
(2, 11, 22)

>>> c = [1,1]
>>> d = (c,22,33)
>>> d
([1, 1], 22, 33)
>>> c[1] = 4
>>> d
([1, 4], 22, 33)
元组中能够包含变量,变量能够改变,但元组的值不会变,元组中变量的值在里第一次建立就肯定了,没法经过变量去改变。

可是若是你的元组中的变量是一个列表list,那么元组中的值会随着列表list改变而改变测试

字典

字典是一种键值对集合,键必须是惟一的,并且键只能用不可变对象,好比字符串,但键值没有多大限制。

d = {key1:value1,key2:value2}

字典的经常使用方法有del删除键值对,添加键值对直接用索引操做符访问一个键并为其赋值,遍历字典则用items方法。

ab = {
    'Swaroop': 'swaroop@swaroopch.com',
    'Larry': 'larry@wall.org',
    'Matsumoto': 'matz@ruby-lang.org',
    'Spammer': 'spammer@hotmail.com'
}
<!--添加键值对-->
ad['addKey'] = 'value'

<!--删除键值对-->
del ab['Larry']

<!--遍历字典-->

for key,value in ad.items():
    print('Contact {} at {}'.format(key,value)

序列

列表list、元组tuple和dict都是序列的一种。

序列的主要特征是:成员测试(例如:in 与 not in 表达式)和索引操做,这两种操做让咱们能够直接从序列中提取特定的部分。

序列还有一种特殊的操做叫作切片,切片可让咱们获得序列的一部分。

shoplist = ['apple','mango','carrot','banana']
name = 'swaroop'

# 字符串索引 #
print('Item 0 is', shoplist[0])
print('Item 1 is', shoplist[1])
print('Item 2 is', shoplist[2])
print('Item 3 is', shoplist[3])
print('Item -1 is', shoplist[-1])
print('Item -2 is', shoplist[-2])
print('Character 0 is', name[0])

# 列表切片 #
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])

# 字符串切片 #
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])

引用

当你建立了一个对象,并把它赋值给一个变量时,这个变量只是 引用 了这个对象,变量并不能表明对象自身!所以,你能够把变量名看成一个指针,它指向储存对象的那一块计算机内存。这称做绑定名称到对象。

print('Simple Assignment')
shoplist = ['apple', 'mango', 'carrot', 'banana']
# mylist 只是指向同一个对象的另外一个别名!
mylist = shoplist

# 我买下了第一件商品,因此把它从列表中移除
del shoplist[0]

print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到 shoplist 和 mylist 产生了一样的输出
# 输出的都是没有 'apple' 的相同列表
# 这验证了它们都指向着同一个对象

print('Copy by making a full slice')
# 经过全切片来得到一个副本
mylist = shoplist[:]
# 移除第一个元素
del mylist[0]

print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到如今这两个列表有差别了

输出:

$ python ds_reference.py
Simple Assignment
shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copy by making a full slice
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']

记住:若是你想要得到列表、或者相似的序列、或更复杂对象的副本,只要不是像整数同样简单的 对象,你都须要经过切片操做来得到它的副本。若是你直接把一个变量名赋值给另外一个,它们两个都会引用同一个对象。在赋值时你须要注意这一点,否则可能会形成意想不到的结果,从而带来麻烦。

相关文章
相关标签/搜索