Python 基础

一、使用list和tuple
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

classmates = ['Michael', 'Bob', 'Tracy']
print classmates[0]
classmates.append('jinzk')
print classmates[3]
classmates.pop(1)
print classmates
classmates.insert(1, 'Jack')
print classmates


另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
classmates = ('Michael', 'Bob', 'Tracy')
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素。

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

t = (1)
print t
t = (1,)
print t

最后来看一个“可变的”tuple:

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print t


这个tuple定义的时候有3个元素,分别是'a','b'和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?

别急,我们先看看定义的时候tuple包含的3个元素:

[img]http://dl2.iteye.com/upload/attachment/0113/4536/b7085c56-dd29-38a0-9dca-d99152b15373.png[/img]
当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:

[img]http://dl2.iteye.com/upload/attachment/0113/4538/c78b361a-90d4-3a16-a276-54fd9ad98791.png[/img]

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

小结
list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。

二、再议raw_input
很多同学会用raw_input()读取用户的输入,这样可以自己输入,程序运行得更有意思:

birth = raw_input('birth: ')
if birth < 2000:
print '00前'
else:
print '00后'


输入1982,结果却显示00后,这么简单的判断Python也能搞错?
当然不是Python的问题,在Python的交互式命令行下打印birth看看:

>>> birth
'1982'
>>> '1982' < 2000
False
>>> 1982 < 2000
True


原因找到了!原来从raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型:
birth = int(raw_input('birth: '))



三、使用dict和set
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print d.get('Michael')
print d.get('Michael',-1)
print d.get('Michael1',-1)


set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

s = set([1, 2, 3])
print s
s = set([1, 1, 2, 2, 3, 3])
print s
s.add(4)
print s
s.remove(4)
print s

s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print s1 & s2
print s1 | s2

a = ['c', 'b', 'a']
a.sort()
print a

a = 'abc'
a = a.replace('a','A')
print a


要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc':

[img]http://dl2.iteye.com/upload/attachment/0113/4630/47f2fe6c-7515-3daf-9036-25a55151c736.jpg[/img]

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了:


[img]http://dl2.iteye.com/upload/attachment/0113/4632/742456e9-36dc-3261-8e9e-b52ca27dbcbf.jpg[/img]
发布了95 篇原创文章 · 获赞 1 · 访问量 3763
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览