资讯专栏INFORMATION COLUMN

Python数据结构学习

leon / 508人阅读

摘要:注本片文章是个人学习总结,内容来自简明教程有序列表是一种保存有序项的数据结构。正因为我们可以增加和删除项,所以我们称列表是一种可变数据类型,也就是说这个类型可以被改变。这称作绑定名称到对象。

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

List 有序列表

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

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

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


len(shoplist)  //4


for item in shoplist:
    print(item)


shoplist.append("rice")


shoplist.sort()


shoplist[0] = "Google"


del shoplist[1]
元组tuple

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

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

元组通常用于这种情况,也就是语句或者用户自定义的函数可以安全地认为值的集合(即,值的元组)不会改变的情况。



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

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

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

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"]

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42483.html

相关文章

  • 关于Python的三个谎言,别再盲目学Python

    摘要:关于的三个谎言,你一定要清楚。这是的整个知识体系图谱,对于新手来说,没必要学那么多。第四自动化测试一切关于自动化的东西,似乎都可以满足,可以满足大多数自动化工作,提升工作效率。这都是正常的,千万别急着否定自己,怀疑自己。 ...

    TZLLOG 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • 学习Python:做数据科学还是网站开发?

    摘要:属于前一种,而且日益被用于数学计算机器学习和多种数据科学应用。近来,由于拥有多个针对机器学习自然语言处理数据视觉化数据探索数据分析和数据挖掘的插件,丰富的数据科学生态体系得到了较大的发展,甚至有将数据科学社区化的趋势。 译者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,发布时间是10月29日。译者一...

    neu 评论0 收藏0
  • 【精华分享】:转行数据分析的一份学习清单

    摘要:数据分析的发展方向一般有商业方向,行业分析业务方向,和机器学习数据挖掘方向。机器学习的书籍推荐统计学习方法,机器学习,机器学习实战三本书。 作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 上一篇主要分享了博主亲身转行数据分析的经历: 【从零学起到成功转行数据分析,我是怎么做的?】 本篇继上一篇将分享转行数据分析的一些经验和学习方法,看完这篇你将会解...

    suemi 评论0 收藏0

发表评论

0条评论

leon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<