• Python学习记录-3-简明Python教程-数据结构


    序列list

    list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目,每个项目之间用逗号分割。列表中的项目应该包括在方括号中,可以添加、删除或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是 可变的 数据类型,即这种类型是可以被改变的。

    shoplist = ['apple', 'mango', 'banana']
    print('i have ',len(shoplist), 'items to purchase')
    print('they are')
    for item in shoplist:
    	print(item)
    print('also want to buy rice')
    shoplist.append('rice')
    shoplist.sort()
    print('shoplist is ', shoplist)
    print('first is', shoplist[0])
    olditem = shoplist[0]
    del shoplist[0]
    print('i bought ', olditem)
    print(shoplist)
    输出
    i have  3 items to purchase
    they are
    apple
    mango
    banana
    also want to buy rice
    shoplist is  ['apple', 'banana', 'mango', 'rice']
    first is apple
    i bought  apple
    ['banana', 'mango', 'rice']
    
    
    

    如果你想要知道列表对象定义的所有方法,可以通过help(list)获得完整的知识。

    元组

    元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。

    zoo = ('wolf', 'elephant', 'penguin')
    print('num of zoo is', len(zoo))
    new_zoo = ('monkey', 'dolphin', zoo)
    print('num of new_zoo is', len(new_zoo))
    print('all animals are', new_zoo)
    print('the last of old zoo is', new_zoo[2][2])
    
    输出:
    num of zoo is 3
    num of new_zoo is 3
    all animals are ('monkey', 'dolphin', ('wolf', 'elephant', 'penguin'))
    the last of old zoo is penguin
    

    变量zoo是一个元组,我们看到len函数可以用来获取元组的长度。这也表明元组也是一个序列。我们可以通过一对方括号来指明某个项目的位置从而来访问元组中的项目,就像我们对列表的用法一样。这被称作 索引 运算符。我们使用new_zoo[2]来访问new_zoo中的第三个项目。我们使用new_zoo[2][2]来访问new_zoo元组的第三个项目的第三个项目。含有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )。

    元组最通常的用法是用在打印语句中,下面是一个例子:

    age = 26
    name = '杉杉林'
    print('%s is %d years old' % (name, age))
    print('%s is learning Python' % name)
    
    输出:
    杉杉林 is 26 years old
    杉杉林 is learning Python
    

    print语句可以使用跟着%符号的项目元组的字符串。这些字符串具备定制的功能。定制让输出满足某种特定的格式。定制可以是%s表示字符串或%d表示整数。元组必须按照相同的顺序来对应这些定制。观察我们使用的第一个元组,我们首先使用%s,这对应变量name,它是元组中的第一个项目。而第二个定制是%d,它对应元组的第二个项目age。Python在这里所做的是把元组中的每个项目转换成字符串并且用字符串的值替换定制的位置。因此%s被替换为变量name的值,依此类推。print的这个用法使得编写输出变得极其简单,它避免了许多字符串操作。它也避免了我们一直以来使用的逗号。在大多数时候,你可以只使用%s定制,而让Python来提你处理剩余的事情。这种方法对数同样奏效。然而,你可能希望使用正确的定制,从而可以避免多一层的检验程序是否正确。在第二个print语句中,我们使用了一个定制,后面跟着%符号后的单个项目——没有圆括号。这只在字符串中只有一个定制的时候有效。

    字典

    字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己对它们排序。字典是dict类的实例/对象。

    add = {
    	'Mary':'123455',
    	'Cheery':'12333333',
    	'Tom':'hehehe'
    }
    print("Mary's teleno is %s" %add['Mary'])
    
    add['Tyra'] = 'Tyra@gmail.com'
    del add['Cheery']
    print('there are %d people in address' % len(add))
    for name, address in add.items():
    	print("Contact %s at %s"%(name, address))
    
    if 'Tyra' in add:
    	print("Tyra's address is %s" % add['Tyra'])
    输出:
    Mary's teleno is 123455
    there are 3 people in address
    Contact Tyra at Tyra@gmail.com
    Contact Mary at 123455
    Contact Tom at hehehe
    Tyra's address is Tyra@gmail.com
    

    注意,一定不要有重复的变量名,之前字典变量名也写成了address,导致最后一句没有得到预期的结果。

    我们使用已经介绍过的标记创建了字典ab。然后我们使用在列表和元组章节中已经讨论过的索引操作符来指定键,从而使用键/值对。我们可以看到字典的语法同样十分简单。我们可以使用索引操作符来寻址一个键并为它赋值,这样就增加了一个新的键/值对,就像在上面的例子中我们对Guido所做的一样。我们可以使用我们的老朋友——del语句来删除键/值对。我们只需要指明字典和用索引操作符指明要删除的键,然后把它们传递给del语句就可以了。执行这个操作的时候,我们无需知道那个键所对应的值。接下来,我们使用字典的items方法,来使用字典中的每个键/值对。这会返回一个元组的列表,其中每个元组都包含一对项目——键与对应的值。我们抓取这个对,然后分别赋给for..in循环中的变量name和address然后在for-块中打印这些值。我们可以使用in操作符来检验一个键/值对是否存在,或者使用dict类的has_key方法。你可以使用help(dict)来查看dict类的完整方法列表。关键字参数与字典。如果换一个角度看待你在函数中使用的关键字参数的话,你已经使用了字典了!只需想一下——你在函数定义的参数列表中使用的键/值对。当你在函数中使用变量的时候,它只不过是使用一个字典的键(这在编译器设计的术语中被称作 符号表 )。

  • 相关阅读:
    底层因为接受到操作系统信号而停止的解决
    C语言判断文件是否存在
    Linux磁盘设备文件(sda,sdb,sdc…)变化问题
    linux mysql 数据目录文件夹移动及所遇到的问题
    Linux Mysql如何移动MySQL数据库目录位置
    Linux 磁盘挂载和mount共享
    提高VS2010/VS2012编译速度
    C++[类设计] ini配置文件读写类config
    WIN32读写INI文件方法
    MS509Team----------------Cknife
  • 原文地址:https://www.cnblogs.com/huyanshan/p/4972477.html
Copyright © 2020-2023  润新知