集合,循环控制
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 |