Python入门基础连载(2)数据结构

Python数据结构包括了列表(list),元组(tuple),字典(dict)和集合(set),这些也都可以称之为容器,下面Cooldog就和大家一起学习一下这些容器:

- 列表(list)

list是处理一组有序项目的数据结构 ,即你可以在一个列表中存储一个序列的项目。列表中的项目应该包括在方括号中,一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的 数据类型,即这种类型是可以被改变的。下面举例:

创建列表:

list1 = ['面包板', '论坛', 2017];

list2 = [1, 2, 3, 4, 5 ];

list3 = ["a", "b", "c", "d"];

打印(#后面是输出结果):

print "list1",list1 # list1 ['面包板', '论坛', 2017]

print "list2[0]:",list2[0]#list2[0]: 1

下面还介绍一些列表的简单操作,想知道list的更多方法在idle里面直接输入dir(list),即可打印出list相关方法。

append()添加一个元素(#后面为输出结果)

list1.append('bb')

print "list1",list1 #list1 ['面包板', '论坛', 2017,'bb']

extend()添加一个列表(#后面为输出结果)

list1.extend([123,123])

print "list1",list1 #list1 ['面包板', '论坛', 2017,'bb',123,123]

还有其它很多方法例如remove,pop等,各位亲们可以自己来测试下,就当练习了。这里和大家讲下列表的复制,举个例子大家自己体会下,复制和引用的区别。

list4=list2 #这个不是列表的复制

list5=list2[:] #这个是列表的复制

print list2 # [1, 2, 3, 4, 5 ]

print list4 # [1, 2, 3, 4, 5 ]

print list5 # [1, 2, 3, 4, 5 ]

list2.reverse() #把list2翻转下 测试一下复制和引用的区别

print list2 # [5,4,3,2,1]

print list4 # [5,4,3,2,1]

print list5 # [1, 2, 3, 4, 5 ]

看了上面的例子,大家可以自己测试下。

-元组(tuple)

元组(tuple)与列表(list)类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

创建如下:

tuple1=(1,2,3,4,5)

tuple2=('Jack','Tom','hello')

tuple3="a","b","c"

创建空元组:

tuple1=()

如果创建元组只包含一个元素,需要在元素后面添加逗号,例如:

tuple1=(1,)

#如果没有逗号可以试验一下,type后类型不是tuple哦!!

tuple2=(1) #type(tuple2) is int

元组索引,截取:

#后面是打印结果

tuple1 = (1,2,3,4,5,6) print "tuple1[0] is:",tuple[0] #tuple1[0] is:1

print "tuple1[1:3] is:",tuple[1:3] #tuple1[1:3] is:(2,3)

元组修改:

元组中的元素是不同修改的,元组没有类似列表apped等修改元素的方法,但是能通过拼接生成一个新的元组,如下:

#后是打印结果

tuple1 = (1,2,3,5,6)

tuple1= tuple1[0:3]+(4,)+tuple1[3:5]

print "tuple1:",tuple1 #tuple1:(1,2,3,4,5,6)

元组删除:

元组中的元素不能添加当然也不能删除,但是可以直接把整个元组删除:

tuple1 =()

del tuple1#此后如果print tuple1 那么就要报错了

元组和列表操作十分相似,但是也有区别,亲们要了解更多元组(tuple)的方法,可以在idle中键入help(tuple)或者dir(tuple)。

注意:任意无符号的对象,以逗号隔开,默认为元组,如下实例:

#后是打印结果

x,y=1,2

print "x is:",x#x is:1

print "y is:",y#y is 2

- 字典(dict)

在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在c++中有map的概念,也就是映射,在python中也提供了内置的映射类型--字典。字典是Python语言中唯一的映射类型。映射其实就是一组key和value以及之间的映射函数,其特点是:key的唯一性、key与value的一对多的映射。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

字典类型与序列类型的区别:

1.存取和访问数据的方式不同。

2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);

3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。

5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。

6.映射类型用键直接“映射”到值。

字典是Python中最强大的数据类型之一

创建字典:

一般形式

#键与值用冒号":"分开

#项与项用逗号","分开

#字典中的键必须是唯一的,而值可以不唯一

dict1 = {}

dict2 =

其他形式

dict2 = dict(a=40,b='面包板')

dict3 = dict((['a',40],['b','面包板'])) #注意括号的数量

访问,修改,添加,删除字典中的值:

访问:

#后面是打印的值

dict2 = dict(a=40,b='面包板')

print dict2['a'] #40

修改:

#后面是打印的值

dict2 = dict(a=40,b='面包板')

dict2['b']='面包板社区'

print dict2['b'] #面包板社区

添加:

#后面是打印的值

dict2 = dict(a=40,b='面包板')

dict2['c']='PCB'

print dict2 #{'a':40,'b':'面包板','c':'PCB'}

删除:

#后面是打印的值

dict2 ={' a':40,'b':'面包板','c':'PCB'}

del dict2['b'] #删除键值为‘b’的字典中的value

print dict2 #

dict2.pop('a') #删除键值为‘a’的字典中的value并返回

print dict2 #{'c':'PCB'}

字典的方法:

字典包含了删除,获取等一系列的方法,这里不再赘述,当然不赘述是希望亲们自己去测试,实验,方法在idle中键入help(dict)或者dir(dict)。

字典的遍历

遍历字典的key(键值):

for key in adict.keys():print key

遍历字典的value(值):

for value in adict.values(): print value

遍历字典的项(元素)

for item in adict.items():print item

遍历字典的key-value

for item,value in adict.items(): print ‘key=%s, value=%s' %(item, value) 或 for item,value in adict.iteritems(): print ‘key=%s, value=%s' %(item, value)

- 集合(set)

python的set和其他语言类似, 是一个 无序、不重复、元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。作为一个无序的集合,所以set不记录元素的位置或者插入点,因此set不支持indexing等操作。作为不重复元素集,用set来出去海量元素中的重复元素是个不错的选择,下面我们来简单介绍下set的相关的知识。

创建集合(set):

#后面是打印结果

a =

b = set('abcd')

c = set({'a':1,'b':2})

d = set(['a','b','c','d']) print(a) #set([1, 2, 3, 4, 5])

print(b) #set(['a', 'c', 'b', 'd'])

print(c) #set(['a', 'b'])

print(d) #set(['a', 'c', 'b', 'd'])

集合(set)基本操作:

#后面是打印结果

a = set('aabbccdd')

b = set('bdef') print(a) #set(['a', 'c', 'b', 'd'])把重复的去除了#交&

a&b set(['b', 'd'])#并

abset(['a', 'c', 'b', 'e', 'd', 'f'])#差a-b

a-bset(['a', 'c'])#差b-a

b-aset(['e', 'f'])#对称差:a和b的交集减去并集 a^b

a^bset(['a', 'c', 'e', 'f'])

集合(set)函数操作:

集合(set)函数方法,可以通过help(set)或者dir(set)来查看,这里稍微举例几个,其他请亲们自己去做做实验哟

# 后面是打印结果

a = set('abcd')

b = set('bdef')# 添加

a.add('x') print(a)set(['a', 'x', 'c', 'b', 'd'])#删除元素

a.remove('x') print(a)set(['a', 'c', 'b', 'd'])#返回set的长的

len(a)

4 #返回4#返回一个新的set包含a和b中的每一个元素

a.intersection(b)set(['b', 'd'])#测试是否 a中的每一个元素都在b中

a.issuperset(b)

False

至此,数据类型Cooldog已经给大家介绍完了,这里只是一些简单的入门基础,深入的应用还要大家自己去探索。

来源:面包板社区

原帖地址:https://forum.mianbaoban.cn/t/python-cool-python/57556

识别下方二维码,关注面包板社区!

本文来自企鹅号 - 面包板社区媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenjx85的技术专栏

leetcode-91-解码方法(动态规划和递归两种解法)

1、这道题给定一个字符串,字符串中只含有数字,数字1可以解码为A,数字2可以解码为B……数字26可以解码为Z。

3644
来自专栏程序员互动联盟

【专业知识】 Webkit智能指针用法

历史: 在WebKit中,许多对象采用了引用计数。这种模式是通过类的ref,deref成员函数来递增和递减对象的引用记数。调用一次ref必须调用一次der...

35915
来自专栏coding for love

JS入门难点解析9-闭包的深入解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

702
来自专栏zhisheng

干货分享:让你分分钟学会 javascript 闭包 一像素

闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它。...

3515
来自专栏程序员的知识天地

Python里面这些点,据说80%的新手都会一脸懵逼

Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来说说这几个点,反正我学...

813
来自专栏Crossin的编程教室

【Python 第52课】 元组

上一次pygame的课中有这样一行代码: x, y = pygame.mouse.get_pos() 这个函数返回的其实是一个“元组”,今天我们来讲讲这个东西。...

3407
来自专栏Brian

Python 深浅拷贝

Python浅拷贝和深度拷贝 今天面试了一个计算机专业研究生且大学出身也很好,但是面试的结果来看并没有达到我的预期。很多基础计算机的知识貌似都不是很懂,更别说...

4128
来自专栏Python入门

十年Python大牛花了三天总结出来的python基础知识实例,超详细!

1843
来自专栏程序员互动联盟

【面试宝典】写一个函数将两个数交换

没有参加过面试的同学可能会很忐忑,面试都会出些什么题呢?其实一般情况下,大部分的面试题都是比较基础的。关于如何交换两个数字,应该是非常简单的问题了。看下面几个函...

3548
来自专栏Java爬坑系列

【Java入门提高篇】Day14 Java中的泛型初探

  泛型是一个很有意思也很重要的概念,本篇将简单介绍Java中的泛型特性,主要从以下角度讲解:   1.什么是泛型。   2.如何使用泛型。   3.泛型的好处...

3336

扫码关注云+社区

领取腾讯云代金券