集合,循环控制
python常用结构
python常用结构有集合以及循环,另外集合包括列表和集合两大类。
集合类
- 有序列表list
1
2
3>>> listTest = ['ha','test','yes']
>>> listTest
['ha', 'test', 'yes']
len()获取list元素个数。
1 | >>> len(listTest) |
可以用索引来访问每一个元素,0表示第一个,-1还可以表示最后一个,即倒数第一个,依此类推-2表示倒数第二个,超过了也会报越界错误。
1 | >>> listTest[0] |
也可以把元素插入到指定的位置,比如索引号为1的位置:
1 | >>> listTest.insert(1,'jack') |
删除末尾元素,用pop()方法,添加到末尾用append():
1 | >>> list |
删除指定位置的元素,用pop(i)方法,其中i是索引位置:
1 | >>> listTest |
把某个元素替换,直接赋值即可,并且类型也可以不同:
1 | >>> listTest |
list也可以嵌套:
1 | >>> s = ['python', 'java', ['asp', 'php'], 'scheme'] |
空的list:
1 | >>> L = [] |
- 不可变列表tuple
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。注意:由于1
2
3
4
5>>> classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates
('Michael', 'Bob', 'Tracy')
>>> classmates[1]
'Bob'tuple不可变,所以代码更安全,如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:如果要定义一个空的1
2
3>>> t = (1, 2)
>>> t
(1, 2)tuple,可以写成():但是,要定义一个只有1个元素的1
2
3>>> t = ()
>>> t
()tuple,如果你这么定义:定义的不是1
2
3>>> t = (1)
>>> t
1tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
1 | >>> t = (1,) |
Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
最后来看一个可变的tuple:
1 | >>> t = ('a', 'b', ['A', 'B']) |
注意:tuple所谓的不变是说,tuple的每个元素,指向永远不变。
- Map
Python内置了字典:dict的支持,dict全称dictionary,在Java/C++中也称为Map,使用键-值(key-value)存储,具有极快的查找速度。1
2
3>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
1 | >>> d['Adam'] = 67 |
注意:如果key不存在,dict就会报错:
1 | >>> d['Thomas'] |
要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
1 | >>> 'Thomas' in d |
或者通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
1 | >>> d.get('Thomas') |
删除dict里的元素,用pop(key)方法,对应的value也会从dict中删除:
1 | >>> d.pop('Bob') |
正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
- set集合
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:1
2
3>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])set会自动过滤重复元素,add(key)添加元素,可以重复添加,但是没有效果。remove(key)删除元素。对于两个集合,还可以通过&取集合的交集,|取集合的并集。
循环控制
条件判断
之前学过Java/C++可能会不太习惯这种方式,先看看python的条件判断代码:1
2
3
4age = 20
if age >= 18:
print 'your age is', age
print 'adult'根据
Python的缩进规则,缩进的代码块就相当于Java/C++里大括号的内容。即if为True,执行代码块内容,加else,elif同理,注意不要漏掉:。1
2
3
4
5
6
7
8if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>注意:
if还可以简写,下面这个和Java/C++有很大的不同,python对类型的判断很宽松,只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。1
2if x:
print 'True'循环控制
循环和Java/C++就很像了,也是有两种:for循环和while循环。for x in ...循环就是把每个元素代入变量x,然后执行缩进代码块:1
2
3names = ['Michael', 'Bob', 'Tracy']
for name in names:
print name
while循环,只要条件满足,就不断循环
1 | sum = 0 |