Python条件、循环语句、Dict(增删改查)和Set
一、Python的条件判断和循环
1.Python之if语句
语法: if + 空格 + 表达式,然后用:
表示代码块开始。
eg:
age = 20
if age >= 18:
print('your age is', age)
print('adult')
print('END')
结果:
your age is 20
adult
END
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
2.Python之if-else语句
eg:
if age >= 18:
print('adult')
else:
print('teenager')
注意: else 后面有个:
。
3.Python之if-elif-else语句
eg:
age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')
结果:
teenage
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了
4.Python之 for循环
说明:Python的 for 循环可以依次把list或tuple的每个元素迭代出来。
eg:
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print(name)
结果:
Adam
Lisa
Bart
总结:这个for循环和Java里面的for-each循环有点类似
5.Python之while循环
eg:利用while循环计算100以内奇数的和
sum = 0
x = 1
while x < 100:
sum = sum + x
x = x + 2
print(sum)
结果:2500
6.Python之break和continue
用法和c语言的一样
7.Python之循环嵌套
eg:对100以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,23(2 < 3)。
for x in range(1, 10):
for y in range(0, 10):
if x < y:
print(x * 10 + y)
结果:
12
13
14
15
16
17
18
19
23
24
25
26
27
28
29
34
35
36
37
38
39
45
46
47
48
49
56
57
58
59
67
68
69
78
79
89
最后,需要说明的是由于 Python 不支持 switch 语句,因此,当存在存在多个条件判断时,我们需要用 else if 来实现。
二、Dict
1.Dict简介和建立
(1)list 和 tuple 可以用来表示顺序集合,而dict是无序集合。所以显示dict时,key-value的顺序可能不一样。另外,dict的元素是以key-value,即键值对的形式存在。
(2)dict的查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
(3)dict是按 key 查找,所以,在一个dict中,key不能重复。
(4)dict的 key 的元素必须不可变,也就是说key不能为list,而value无所谓。
(5)建立dict语法:花括号 {}
表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
eg:创建一个dict
d = {
'wang' : 100,
'zhao' : 90,
'li' : 80
}
print(d)
结果:{'wang': 100, 'zhao': 90, 'li': 80}
建议:对于list、tuple、dict集合中字符串元素最好是用单引号不用双引号,因为,显示list、tuple和dict中的字符串时,是以单引号的形式显示的,所以,我们用单引号统一比较好。print函数无所谓。
(4)由于dict也是集合,len()
函数可以计算任意集合的大小:
eg:
d = {
'wang' : 100,
'zhao' : 90,
'li' : 80
}
len(d)
结果:3
注意: 一个 key-value 算一个,因此,dict大小为3。
2.Dict添加元素
dict添加元素有两种方法:
(1)语法:d[key] = value
说明:如果dict中有该key,则用value替换原来的value,若dict不存在该key,则dict添加key:value这对元素。
eg:
d = {
'wang' : 100,
'zhao' : 90,
'li' : 80
}
d['wang'] = 50
print(d)
d['tian'] = 20
print(d)
结果:
{'wang': 50, 'zhao': 90, 'li': 80}
{'wang': 50, 'zhao': 90, 'li': 80, 'tian': 20}
(2)用setdefault(key, value = None)
方法。
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
print(d)
d.setdefault('wang', 30)
print(d)
d.setdefault('xu')
print(d)
d.setdefault('tian', 50)
print(d)
结果:
{'wang': 100, 'zhao': 80, 'li': 60}
{'wang': 100, 'zhao': 80, 'li': 60}
{'wang': 100, 'zhao': 80, 'li': 60, 'xu': None}
{'wang': 100, 'zhao': 80, 'li': 60, 'xu': None, 'tian': 50}
注意:若key存在,用setdefault(key, value = None)
方法是不能更改dict的元素的,另外,value默认为None
3.dict删除元素
删除dict中的元素有5中方法:
(1)用pop(key)
方法
说明:这与列表的pop()方法不同,dict的pop()方法必须得给它传一个key值,如果字典里没有该key,则会报错。也可以用 pop(key,‘返回值’) 来指定返回值,此时,当找不到key的时候,则不会报错,会将指定的返回值返回。
eg:key不存在,并且没有设置返回值
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
d.pop('tian')
结果:
Traceback (most recent call last):
File "Hello.py", line 6, in <module>
d.pop('tian')
KeyError: 'tian'
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
a = d.pop('tian', '没有该key')
print(a)
print(d)
d.pop('wang')
print(d)
结果:
没有该key
{'wang': 100, 'zhao': 80, 'li': 60}
{'zhao': 80, 'li': 60}
(2)popitem()
方法:
说明:此方法类似于列表的pop()方法,用来随机删除一个元素,返回删除的那个元素的(健,值)
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
x,y = d.popitem()
print(x, ':', y)
print(d)
结果:
li : 60
{'wang': 100, 'zhao': 80}
(3)del dict[key]
语句
说明:此方法用来删除字典种指定key以及它所对应的value,如果找不到该key,则会报错。
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
del d['wang']
print(d)
结果:{'zhao': 80, 'li': 60}
(4)clear()
方法:
说明:该方法与列表的clear()方法类似,用来清空字典。
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
d.clear()
print(d)
结果:{}
(5)del dict
语句
说明:删除该dict
eg:
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
del d
print(d)
结果:
Traceback (most recent call last):
File "Hello.py", line 7, in <module>
print(d)
NameError: name 'd' is not defined
4.更改dict元素
语法:dict[key] = value
上面第4点,删除dict元素的(1)中提到了,这里不再说明。
5.访问Dict
语法:使用 d[key]
的形式来查找对应的 value
eg:
d = {
'wang' : 100,
'zhao' : 90,
'li' : 80
}
print(d['wang'])
结果:100
若访问不存在的value会报KeyError
的错误,那怎么避免?有两种方法
(1)先判断一下 key 是否存在,用 in 操作符:
if key in d:
print(d[key])
(2) 使用dict本身提供的一个get (key, value=None)
方法,在Key不存在的时候,返回None, 如果设置第二个参数的值,如果key不存在,则会返回你指定的值:
eg:print(d.get('wang'))
结果:100
eg:print(d.get('xu'))
结果:None
eg:接收一个列表,找出其中数量最多的元素,如果元素数量相同,选择列表中靠前的元素输出。
counts={}
num=eval(input())
for i in num:
counts[i]=counts.get(i,0)+1 # 如果元素已经存在,会加一,不存在,设置为一,很巧妙
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
num, a=items[0]
print(int(num))
6.得到key和value遍历Dict
语法:keys()
方法和values()
方法
d = {
'wang': 100,
'zhao': 80,
'li': 60
}
print(d.keys())
print(list(d.keys()))
print(d.values())
print(list(d.values()))
for key in d.keys():
print(key)
for value in d.values():
print(value)
结果:
dict_keys(['wang', 'zhao', 'li'])
['wang', 'zhao', 'li']
dict_values([100, 80, 60])
[100, 80, 60]
wang
zhao
li
100
80
60
注意:用for循环来遍历dict,只会显示其key的值。
eg:
d = {
'wang' : 100,
'zhao' : 90,
'li' : 80
}
for key in d:
print(key)
结果:
wang
zhao
li
三、Set
1.建立Set
说明:set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。这样看来,set是为dict的key值量身定做的。创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素。
eg:
d = ['wang', 'zhao', 'li', 'li']
s = set(d)
print(s)
结果:
{'zhao', 'li', 'wang'}
注意:可以看到set会自动去掉重复的元素。
2.访问Set元素
说明:由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。
eg:
d = ['wang', 'zhao', 'li', 'li']
s = set(d)
print('wang' in s)
结果:True
3.Set的特点
(1)set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
(2)set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
注意:有的人可能会问,list不是可变的吗?list确实是可变的,但是执行s = set(d)
时,d的元素是固定的,d把元素复制给s,你再改变d的元素是不会影响s中的元素的。而dict不一样,假如dict的key可以是list的话,假设dict的key是list,你可以更改list中的元素。如果您还不能理解,见如下代码:
d = ['wang', 'zhao', 'li']
s = set(d)
d[1] = 'xu'
print(s)
s = set(d)
print(s)
结果:
{'li', 'zhao', 'wang'}
{'xu', 'li', 'wang'}
(3)set的这些特点,可以应用在哪些地方呢?
假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢?
eg:
x = 'MON' #假设x是用户输入的日期
s = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
if x in s:
print(x)
else:
print("您输入的日期错误!")
结果:MON
还可以用来去重,比如你用爬虫爬取了一些链接,里面可能有重复的链接,这样,你完全可以将一个list转为set来去掉这些重复的链接。
4.遍历Set
用for循环来遍历set
eg:
d = ['wang', 'zhao', 'li']
s = set(d)
for name in s:
print(name)
结果:
wang
li
zhao
5.Set之添加元素
(1)添加元素,用add()
方法
eg:
d = ['wang', 'zhao', 'li']
s = set(d)
print(s)
s.add('xu')
print(s)
结果:
{'li', 'zhao', 'wang'}
{'xu', 'li', 'zhao', 'wang'}
(2)用update()
方法
eg:
s1 = set([1, 2, 3])
s2 = set(['a', 'b'])
s1.update(s2)
print(s1)
结果:{'a', 1, 2, 3, 'b'}
6.Set之删除元素
(1)删除元素,用remove()
方法.
eg:
d = ['wang', 'zhao', 'li']
s = set(d)
print(s)
s.remove('li')
print(s)
结果:
{'li', 'wang', 'zhao'}
{'wang', 'zhao'}
(2)pop( )
方法随机删除(蛮简单,不写代码了)
(3)clear( )
方法 清空集合元素(蛮简单,不写代码了)
四、字典和集合的工作原理
字典和集合的内部结构都是一张哈希表。
- 对于字典而言,这张表存储了哈希值(hash)、键和值这 3 个元素
- 而对集合来说,区别就是哈希表内没有键和值的配对,只有单一的元素
老版本 Python 的哈希表结构如下所示:
--+-------------------------------+
| 哈希值 (hash) 键 (key) 值 (value)
--+-------------------------------+
0 | hash0 key0 value0
--+-------------------------------+
1 | hash1 key1 value1
--+-------------------------------+
2 | hash2 key2 value2
--+-------------------------------+
. | ...
__+_______________________________+
这样的设计结构显然非常浪费存储空间。为了提高存储空间的利用率,现在的哈希表除了字典本身的结构,会把索引和哈希值、键、值单独分开,也就是下面这样新的结构:
Indices
----------------------------------------------------
None | index | None | None | index | None | index ...
----------------------------------------------------
Entries
--------------------
hash0 key0 value0
---------------------
hash1 key1 value1
---------------------
hash2 key2 value2
---------------------
...
---------------------
我们可以很清晰地看到,空间利用率得到很大的提高。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84778.html