Python基础第四天——字典、布尔值、集合

一、拾遗

1、在Python中数据又称为对象,每创建一个对象都会创建三个属性:

(1)身份:id 

is 用来比较id,id一样,type和value肯定一样

(2)类型:type 

用 type() 查看某一个对象的类型,例:

type(1)  is('a")可以判断类型是不是一样

(3)值:value

 == 用来比较值,id不一样,value一定不一样

2、列表的常用操作

(1)定义:

l = [l,'a',[1,2,3]] 相当于 l = list(['a',[1,2,3]])

列表里可以是任意数据类型

列表是可变数据类型

(2)索引

通过索引取值: [ ]

中括号中加上索引值,就可以取出列表中的元素名了。

(3)循环

<1>根据索引方式循环用while和for

I、while

index = 0

while index < len(l)

  print(l[index])

  index += 1

II、for

for i in range(len(l)):

  print(l[i])

<2>不通过索引方式用for

for i in l:

 print(i)

(4)切片

读操作

例:

l[1:5] # 表示切到索引位置1-4的位置,顾首不顾尾

l[1:5:2]  # 2是步长

(5)追加

l.append(元素)

(6)删除

删除索引值为0的元素

del l[0]

l.pop[0]

l.remove[0]

(7)长度

len(l)

(8)包含

元素 in 列表名

 

3、元组

(1)定义:

t= (l,'a',[1,2,3]])相当于 t = tuple(('a',[1,2,3]))

元组是不可变数据类型

注意:当元组里只有一个元素时,最好是加上“”,例:t = ("x",)

元组本身的元素不可改变,但是元组中的子元素可以改变

例:

对元组本身的元素进行更改会提示错误

 对元组中的元素可以进行更改

(2)索引

通过索引取值: [ ]

(3)循环

<1>根据索引方式循环用while和for

I、while

index = 0

while index < len(t)

  print(t[index])

  index += 1

II、for

for i in range(len(t)):

  print(t[i])

<2>不通过索引方式用for

for i in t:

 print(i)

(4)长度

len(t)

(5)切片

读操作

通过索引切片: [:]

例:

t[1:9:2]  # 表示取索引位置1-8之间的元素,且步长为2。顾首不顾尾

(6)包含

通过in

 

 

4、字典

(1)定义

d = {“key”:"value"} 或 d = dict({"key":"value"})

(2) 取值

d[“key”] = value

(3)循环

不通过索引的方式:

例:

d = {'x':1,"y":2}

for k in d:

  print(k)    # 取出字典中的key

  print(d[k]) # 取出字典中的value

 (4)修改

[ ]来对字典进行修改操作

 d['name'] = 'xiaoxiaobai'   # 将原来的值"xiaobai"改为“xiaoxiaobai”

 (5)嵌套

(6)字典的其它常用操作

参考:http://www.cnblogs.com/xiaoxiaobai/p/7615608.html

<1>item()

返回可遍历的(键、值)元组数组

例:

d = {'x':1,'y':1}

for item in d.items():  # [('x',1),('y',1)]

  print(item)  # 遍历出每个元组

<2>变量赋值

例1:

k,v = (1,2)

print(k,v)

所以在循环字典时可以用两个变量分别表示字典的key和value来循环:

例2:

d = {'x':1,'y':1}

for k,v in d.items():  # k表示字典的key,v表示字典的value

  print(k,v)   # 取出字典里的键和值:x 1  

                      y 1

<3>keys()

取出字典中所有的key

例:

d = {'x':1,'y':1}
res = list(d.keys())  # 将取出的字典里的所有的key转换成列表
print(res)   # 都存放到列表里

 

<4>popitem()

随机返回并删除字典中的一对键和值。

例:

d = {'x':1,'y':12222}

print(d.popitem())  # 随机返回并删除字典中的一对键和值,记住popitem()括号里不能加参数

print(d)  # 得到删除后的字典

(7)删除

d.pop("x")

d.popitem()  # 随机删除

(8)键、值、键值对

d.keys()

d.values()

d.items()

(9)长度

d = {'x':1,'u':2}

print(len(d))

(10)成员运算

d = {'x':1,'u':2}

print("x" in d) # 判断key是否在字典里,得到布尔值

print(1 in d.values()) # 判断value是否在字典里,得到布尔值

(11)补充:

字典中如果有相同的key,则最后一个生效:

d ={'x':1,'x':2}

print(d)   # 输出结果为{'x':2}

 

 

 

 

二、布尔值

1、True和False

产生布尔值:

print(type(True))  # 可以查看布尔值是由bool的工厂函数产生的。

 

之前碰到的布尔值都是通过比较运算和成员运算得到布尔值

例:

count = 10

print(count > 10)  # 得到布尔类型:False ,相当于在调用bool的工厂函数:print(bool(count > 10))

 

2、所有的数据类型都自带布尔值。只有0、None、空的布尔值为False,其它都是Ture

例1:判断列表为空

l = []

if len(l) == 0:  # 判断列表的长度等于0,这个地方实际上是拿到了一个布尔值。

 print("列表为空")

 

例2:自带布尔值的概念

l = []

if not l: 

# 直接写到条件判断的后面,if判断则会调用bool()函数,把列表l传进去,得到bool(l),

#这时的列表l相当于False,等于if not False,也就是 if True:

 print("列表为空")

 

综上所述:什么叫自带布尔值?

if 判断会自动去调bool()工厂函数,然后把数据类型传进去

 

例3:写一个用户输入命令为空的情况下让其继续输入命令:

# 例3:写一个用户输入命令为空的情况下让其继续输入命令:
while 1:
    cmd = input("Please input your cmd:")
    if not cmd:   #   cmd本身带布尔值,如果输入为空,相当于cmd这里放了一个False
                  #  此时cmd是空,加上not,表示不为空的情况下条件才成立。
                  #  not cmd合到一块代表命令输入为空的情况下
        continue
    print("====>cmd",cmd)  # 输入回车后继续输入。

 

 

 

 

 

 

 

三、集合

1、定义:

例:

s = {"a","b",1,2,"b"}  # 实际上是在调用 s = set({"a","b",1,2,"b"})

 

2、集合的特点:

集合内的元素必须是唯一的

集合内的元素必须是可hash的(不可变的类型)

集合是无序的

集合没有索引也没有key,不能单个取值

集合是用来作关系运算的,做一个集合与另一个集合找共同部分等操作,单个元素不考虑用集合

 

3、作用

作用1:关系运算

作用2:去重

 

4、循环

集合只能用不依赖索引的方式遍历

例:

s = {"a","b",1,2,"b"}

for i in s:

 print(i)  # 遍历每个集合的元素

 

5、关系运算

例:假设一个培训机构分别开设了linux培训班和python培训班,用集合求出以下关系运算:

linux_s = {"小白","威廉",“骑士”,“丽莎”,“布丁”,"小宋"}

python_s = {"糖宝",“谢公子”,“布丁”,"猴哥",“鹏牛”,“小白”}

(1)取共二者的共同部分:

找出既报了linux班又报了python班的学生:

    print(python_s & linux_s)        # 交集

或      print(python_s.intersection(linux_s)# 交集

输出结果:

{"布丁","小白"}

 

 

(2)取二者的所有学生:

取出所报了这个培训班所有的学生:

    print(python_s | linux_s)       # 并集

或   print(python_s.union(linux_s))    # 并集

输出结果:

{"糖宝",“谢公子”,“布丁”,"猴哥",“鹏牛”,“小白”,"威廉",“骑士”,“丽莎”,"小宋"}

 

(3)取只报了python课程的学生:

     print(python_s - linux_s)           # 差集

或    print(python_s.difference( linux_s))       # 差集

输出结果:

{"糖宝",“谢公子”,"猴哥",“鹏牛”}

 

(4)取没有同时报python课程和linux课程的学生:

     print(python_s ^ linux_s)     # 对称差集

 

或    print(python_s .symmetric_difference(linux_s))     # 对称差集

输出结果:

{"糖宝",“谢公子”,"猴哥",“鹏牛”,“威廉”,“骑士”,"丽莎",“”}

 

(5)其它方法操作

 参考:http://www.cnblogs.com/xiaoxiaobai/p/7615608.html

 

 

 

 

四、补充:

1、字符串格式化:%s

例:

res = "name:%s"  %"xiaobai"    # 如果是%d,就只能传数字

2、while和else的连用

要执行else下的语句,必须满足:1、循环结束

          2、没有被break打断  

例1:

count = 1
while count < 10:
    print(count)
    break
    count += 1
else: # 在循环正常结束后执行,
      # 条件:1、循环结束   2、没有被break打断
      # 只有符合以上两点条件,才会执行else下的语句
      # 此例因为循环体有break,所以不会执行else下的语句
    print("hahahaha")

 

例2:

for i in range(10):
    print(i)
    if i == 5:
        break
else:  # 只有符合以上两点条件,才会执行else下的语句
       # 此例因为循环体有break,所以不会执行else下的语句
    print("hahahaha")

 

3、小练习:

要求:将以下列表在不打乱排序的情况下去重。

l = ["xiaobai","lisa","knight","xiaobai","william"]

l = ["xiaobai","lisa","knight","xiaobai","william"]
l1 = []
for i in l:         # 遍历l列表中的每个元素
    if i not in l1: # 最关键的一步:如果这个元素没有在列表l1里
        l1.append(i) # 则将遍历的元素都添加到l1列表中
print(l1)

输出结果:

['xiaobai', 'lisa', 'knight', 'william']
View Code

 

posted @ 2017-10-01 12:14  奔跑吧小白  阅读(823)  评论(0编辑  收藏  举报
levels of contents