day12-数据类型之列表、元组、字典、for循环、布尔值

1、list 类,列表

########################################### 灰魔法:list类中提供的方法#############################

append(self, p_object)

1 功能:在原来值后面追加
2 li = [11,22,33,44]
3 li.append(55)
4 print(li)
5 输出结果:[11, 22, 33, 44, 55]

clear(self)

1 功能:清空列表
2 li = [11,22,33,44]
3 li.clear()
4 print(li)
5 输出结果:[]

copy(self)

1 功能:浅拷贝
2 li = [11,22,33,44]
3 v = li.copy()
4 print(v)
5 输出结果:[11, 22, 33, 4

count(self, value)

1 功能:计算元素出现的次数
2 li = [11,22,33,44,22]
3 v = li.count(22)
4 print(v)
5 输出结果:2

extend(self, iterable)

1 功能:扩展原来的列表,参数:可迭代对象
2 li = [11,22,33,44,22]
3 li.extend([99,22,"李阳"])
4 print(li)
5 输出结果:[11, 22, 33, 44, 22, 99, 22, '李阳']

index(self, value, start=None, stop=None)

1 功能:根据值获取当前索引位置,从最左边开始找
2 li = [11,22,33,44,22]
3 v = li.index(22)
4 print(v)
5 输出结果:1

insert(self, index, p_object)

1 功能:在指定索引位置插入
2 li = [11,22,33,44,22]
3 li.insert(0,99)
4 print(li)
5 输出结果:[99, 11, 22, 33, 44, 22]

pop(self, index=None)

 1 功能:删除某个值(1.指定索引;2.默认是最后一个值)并获取删除的值
 2 li = [11,22,33,44,22]
 3 v1 = li.pop()
 4 v2 = li.pop(2)
 5 print(v1)
 6 print(li)
 7 print(v2)
 8 输出结果:
 9 22
10 [11, 22, 44]
11 33

remove(self, value)

1 功能:删除列表中的指定值,左边优先
2 li = [11,22,33,44,22]
3 li.remove(22)
4 print(li)
5 输出结果:[11, 33, 44, 22]

reverse(self)

1 功能:将当前列表进行翻转
2 li = [11,22,33,44,22]
3 li.reverse()
4 print(li)
5 输出结果:[22, 44, 33, 22, 11]

sort(self, key=None, reverse=False)

1 功能:默认从小到大排序,reverse=True 从大到小排序
2 li = [11,22,33,44,22]
3 li.sort()
4 li.sort(reverse=True)
5 print(li)
6 输出结果:
7 [11, 22, 22, 33, 44]
8 [44, 33, 22, 22, 11]

##############################################深灰魔法#######################################################

列表格式

1 通过list类创建的对象,li
2 中括号括起来
3 ,分割每个元素
4 列表中的元素可以是 数字,字符串,列表,布尔值...所有的元素都可以放进去。
5 “集合”,内部放置任何东西
6 列表的元素可以被修改
7 列表中可以嵌套任何类型

索引取值

1 print(li[3])
2 输出结果 45

切片

1 print(li[4:5])
2 print(li[3:-1])
3 print(li[:4])
4 print(li[4:])
5 输出结果 [['李阳', [12, 20], 'liyang']]
6 输出结果 [45, ['李阳', [12, 20], 'liyang'], 65, 45, 'age', 'name']
7 输出结果 [1, 23, 12, 45]
8 输出结果 [['李阳', [12, 20], 'liyang'], 65, 45, 'age', 'name', True]

for循环

1 li = [1,23,["李阳",[12,20]],'name',True]
2 for item in li:
3     print(item)
4 输出结果:
5 1
6 23
7 ['李阳', [12, 20]]
8 name
9 True

索引修改

1 li = [1,23,["李阳",[12,20]],'name',True]
2 li[2] = 99
3 print(li)
4 输出结果:[1, 23, 99, 'name', True]
5 li[1] = [11,22,33]
6 print(li)
7 输出结果:[1, [123], 99, 'name', True]

切片修改

li = [1,23,["李阳",[12,20]],'name',True]
li[1:2] = [88,66]
print(li)
输出结果:[1, 88, 66, ['李阳', [12, 20]], 'name', True]

索引删除

1 li = [1,23,["李阳",[12,20]],'name',True]
2 del li[1]
3 print(li)
4 输出结果:[1, ['李阳', [12, 20]], 'name', True

切片删除

1 li = [1,23,["李阳",[12,20]],'name',True]
2 del li[1:3]
3 print(li)
4 输出结果:[1, 'name', True]

in 操作

1 li = [1,23,["李阳",[12,20],"liyang"],True]
2 v1 = 1 in li
3 print(v1)
4 输出结果:True
5 
6 v2 = '李阳' in li
7 print(v2)
8 输出结果:False

取列表中列表中的元素操作

1 li = [1,23,["李阳",[12,20],"liyang"],True]
2 print(li[2][1][1])
3 输出结果:20

把字符串转换成列表 (转换过程内部使用for循环) 注意:数字不能转换成列表

1 s1 = "liyang"
2 v = list(s1)
3 print(v)
4 输出结果:['l', 'i', 'y', 'a', 'n', 'g']

把列表转换成字符串

1.既有数字又有字符串的需要自己写一个for循环一个一个处理。

1 li = [11,22,33,"123","liyang"]
2 s = ""
3 for i in li:
4     s = s + str(i)
5 print(s)
6 输出结果:112233123liyang

2.列表中的元素只有字符串的可以直接使用join

1 li = ["123","liyang","sun"]
2 v = "".join(li)
3 print(v)
4 输出结果:123liyangsun

列表嵌套

1 li = [1, 2, 3,['alex', 'wusir', '老男孩'], 4]
2 for x in li:
3     if isinstance(x, list):
4         for y in x:
5             print(str(y) + ' ', end='')
6     else:
7         print(str(x) + ' ', end='')
8 输出结果:1, 2, 3,'alex', 'wusir', '老男孩',4

 

2、元组 tuple

###########################################灰魔法:tuple类中提供的方法#####################

count(self, value)

1 功能:获取指定元素在元组中出现的次数
2 tu = (11,22,33,44,22)
3 v = tu.count(22)
4 print(v)
5 输出结果:

index(self, value, start=None, stop=None)

1 功能:获取指定元素在元组中的位置,从最左边开始找
2 tu = (11,22,33,44,22)
3 v = tu.index(22)
4 print(v)
5 输出结果:1

#####################################深灰魔法############################################

元组:tuple

1 元素不可被修改,不能被增加和删除
2 一般写元组的时候 ,推荐在最后加入,
3 书写格式()
4 元组是有序的

索引取值

1 tu = (11,"liyang",(11,22),[(55,66)],True,99,)
2 v = tu[0]
3 print(v)

索引切片

1 tu = (11,"liyang",(11,22),[(55,66)],True,99,)
2 v = tu[0:3]
3 print(v)
4 输出结果:(11, 'liyang', (11, 22))

for循环,可迭代对象

tu = (11,"liyang",(11,22),[(55,66)],True,99,)
for item in tu:
    print(item)
输出结果:
11
liyang
(11, 22)
[(55, 66)]
True
99

转换

 1 s = "liyang"
 2 li = ["sun","lili"]
 3 tu = ("conquer","good")
 4 
 5 v1 = tuple(s)
 6 v2 = tuple(li)
 7 v3 = tuple(tu)
 8 print(v1)
 9 print(v2)
10 print(v3)
11 输出结果:
12 ('l', 'i', 'y', 'a', 'n', 'g')
13 ('sun', 'lili')
14 ('conquer', 'good')

元组的一级元素不可修改/删除/增加

1 tu = (11,"liyang",(11,22),[(55,66)],True,99,)
2 tu[3][0] = 999
3 print(tu)
4 输出结果:
5 (11, 'liyang', (11, 22), [999], True, 99)

三、字典  dict

#################################################灰魔法###########################################

fromkeys(*args, **kwargs)

1 功能:根据序列创建字典,并指定统一的值
2 v = dict.fromkeys(["k1","k2",123],'liyang')
3 print(v)
4 输出结果:{'k2': 'liyang', 123: 'liyang', 'k1': 'liyang'}

get(self, k, d=None)

1 功能:根据key获取值,key不存在时,可以指定默认值(None)
2 dic = {
3     "k1": 'liyang'
4 }
5 v = dic.get('k2',1123)
6 print(v)
7 输出结果:
8 1123

pop(self, k, d=None)

1 功能:指定key删除值
2 dic = {
3     "k1": 'liyang',
4     "k2": 'sun'
5 }
6 v = dic.pop('k1')
7 print(dic,v)
8 输出结果:{'k2': 'sun'} liyang

popitem(self)

1 功能:随机删除key和vlear
2 dic = {
3     "k1": 'liyang',
4     "k2": 'sun'
5 }
6 k,v = dic.popitem()
7 print(dic,k,v)
8 输出结果:
9 {'k1': 'liyang'} k2 sun

setdefault(self, k, d=None)

 1 功能:设置值
 2 如果已经存在,不设置,获取当前key对应的值
 3 如果不存在,设置值,获取当前key对应的值
 4 dic = {
 5     "k1": 'liyang',
 6     "k2": 'sun'
 7 }
 8 v = dic.setdefault('k1',123)
 9 print(dic,v)
10 输出结果:
11 {'k2': 'sun', 'k1': 'liyang'} liyang

update(self, E=None, **F)

1 功能:更新
2 dic = {
3     "k1": 'liyang',
4     "k2": 'sun'
5 }
6 dic.update({'k1':'zzzz','k3': 123})
7 dic.update(k1='zzzz',k3=123)
8 print(dic)
9 输出结果:{'k1': 'zzzz', 'k3': 123, 'k2': 'sun'}

################################################深灰魔法#################################

字典格式

1 键值对
2 字典的value可以是任何值
3 列表、字典不能作为字典的key
4 字典是无序的
5 info = {"k1":"v1","k2":"v2"}

索引取值

 1 info = {
 2     1: 'adfs',
 3     "k1": 'add',
 4     True: "123",
 5     (11,22): "123",
 6     "k2": (11,22)
 7 }
 8 v1 = info["k1"]
 9 print(v1)
10 v2 = info["k2"][0]
11 print(v2)
12 输出结果:
13 add
14 11

del 删除键值

1 info = {
2     'k1': 'liyang',
3     'k2': 'sun'
4 }
5 del info['k1']
6 print(info)
7 输出结果:
8 {'k2': 'sun'}

for 循环

默认循环字典里的key
value:获取字典的值
items:获取字典的key和value

 1 info = {
 2     'k1': 'liyang',
 3     'k2': 'sun'
 4 }
 5 for item in info.keys():
 6     print(item)
 7 输出结果:
 8 k1
 9 k2
10 
11 for item in info.values():
12     print(item)
13 输出结果:
14 liyang
15 sun
16 
17 for k,v in info.items():
18     print(k,v)
19 
20 输出结果:
21 liyang
22 sun
23 k1 liyang
24 k2 sun

整理

一、数字
int()

二、字符串
replace/find/join/strip/startswith/split/upper/lower/format

tempalte = "i am {name},age:{age}"
v = tempalte.format(**{'name':'liyang','age':28})

三、列表
append/extend/insert

四、元组
索引,切片,循环

五、字典
get/update/keys/items/values

for循环

六 、布尔值
bool(...)

None "" () [] {} 0 ==> False

四、课后练习

a.列表课后作业练习

#!/usr/bin/env python
# coding: utf-8

# 1:写代码,有如下列表,按照要求实现每一个功能
# li = ['zhangsan','lisi','wangwu','liliu','zhuqi']
# 1:计算列表的长度并输出
# v = len(li)
# print(v)

# 2:列表中追加元素'wangba',并输出添加后的列表
# li.append('wangha')
# print(li)

# 3:请在列表的第1个位置插入元素’Tony’,并输出添加后的列表
# li.insert(1,'Tony')
# print(li)
# 4:请修改列表第2个位置的元素为’Kelly’,并输出修改后的列表
# li[2] = 'Kelly'
# print(li)

# 5:请将列表l2=[1,’a’,3,4,’heart’]的每一个元素添加到列表li中,一行代码实现,不允许循环添加
# l2 = [1,'a',3, 4,'heart']
# li.append(l2)
# print(li)

# 6:请将字符串s = ‘qwert’的每一个元素添加到列表li中,一行代码实现,不允许循环添加
# s = 'qwert'
# li.extend(s)
# print(li)

# 7:请删除列表中的元素’wangwu’,并输出删除后的列表
# li.remove('wangwu')
# print(li)

# 8:请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
# print(li.pop(2))
# print(li)

# 9:请删除列表中的第2至4个元素,并输出删除元素后的列表
# del li[2:5]
# print(li)
# 10:请将列表所有得元素反转,并输出反转后的列表 # li.reverse() # print(li) # 11:请计算出‘zhangsan’元素在列表li中出现的次数,并输出该次数 # v = li.count('zhangsan') # print(v) # 2:写代码,有如下列表,利用切片实现每一个功能 # li1 = [1,3,2,'a',4,'b',5,'c'] # 1:通过对li1列表的切片形成新的列表l1,l1 = [1,3,2] # l1 = li1[:3] # print(l1) # 2:通过对li1列表的切片形成新的列表l2,l2 = [’a’,4,’b’] # l2 = li1[3:6] # print(l2) # 3:通过对li1列表的切片形成新的列表l3,l3 = [1,2,4,5] # l3 = li1[:7:2] # print(l3) # 4:通过对li1列表的切片形成新的列表l4,l4 = [3,’a’,’b’] # l4 = li1[1:6:2] # print(l4) # 5:通过对li1列表的切片形成新的列表l5,l5 = [‘c’] # l5 = li1[-1:] # print(l5) # 6:通过对li1列表的切片形成新的列表l6,l6 = [‘b’,’a’,3] # l6 = li1[-3::-2] # print(l6) # 3:写代码,有如下列表,按照要求实现每一个功能 # lis = [2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'] # 1:将列表lis中的’tt’变成大写(用两种方式) # lis[3][2][1][0] = 'TT' # print(lis) # lis[3][2][1][0] = lis[3][2][1][0].upper() # print(lis) # 2:将列表中的数字3变成字符串’100’(用两种方式) # lis[1] = '100' # lis[3][2][1][1] = '100' # print(lis) # lis[1] = str(int(lis[1] + 97)) # lis[3][2][1][1] = str(int(lis[3][2][1][1] + 97)) # print(lis) # 3:将列表中的字符串’1’变成数字101(用两种方式) # lis = [2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'] # lis[3][2][1][2] = 101 # print(lis) # lis[3][2][1][2] = int(int(lis[3][2][1][2]) + 100) # print(lis) # 4请用代码实现: # 利用下划线将列表的每一个元素拼接成字符串"sam_tom_jack" # li = ['sam','tom','jack'] # v = "_".join(li) # print(v) # 5:查找列表li中的元素,移除每个元素的空格 # 并找出以’A’或者’a’开头,并以’c’结尾的所有元素 # 并添加到一个新列表中,最后循环打印这个新列表。 # li3 = ['taibai ','alexC','AbC ','egon',' Ritian',' Wusir',' aqc'] # new_list = [] # for i in li3: # s = i.strip() # if (s.startswith('A') or s.startswith('a') and s.endswith('c')): # new_list.append(s) # else: # pass # print(new_list) # 6:开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符: # 敏感词列表 li = ["苍老师","东京热",”武藤兰”,”波多野结衣”] # 则将用户输入的内容中的敏感词汇替换成***,并添加到一个列表中; # 如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中 # li = ["苍老师","东京热","武藤兰","波多野结衣"] # # new_list = [] # s = input('>>>') # for i in li: # if i in s: # s = s.replace(i,'***') # else: # new_list.append(s) # print(new_list) # # 7有如下列表li = [1,3,4’,alex’,[3,7,8,’taibai’],5,’ritian’] # 循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。 # 我想要的结果是(用两种方法实现,其中一种用range做) # 第一种 # li = [1,3,4,'alex',[3,7,8,'taibai'],5,'ritian'] # for i in li: # if type(i) == list: # for x in i: # print(str(x) + ' ', end = '') # else: # print(str(i) + ' ', end = '') #第二种 # # for x in range(len(li)): # if isinstance(li[x],list): # for y in li[x]: # print(y) # else: # print(li[x])

b.元祖、字典课后练习题

# 1,有如下变量(tu是个元祖),请实现要求的功能
# tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
#         a. 讲述元祖的特性
#         答:元祖被称为只读列表,不能被修改

#         b. 请问tu变量中的第一个元素 “alex” 是否可被修改?
#         答:不能

#         c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?
#              如果可以,请在其中添加一个元素 “Seven”
#         答:'k2'对应的值是一个列表(list)类型,可以被修改


#         d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
#         答:'k3'对应的是元组,不能被修改

# 2, 字典dic
# dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
#     a. 请循环输出所有的key
# for i in dic.keys():
#     print(i)


#     b. 请循环输出所有的value
# for i in dic.values():
#     print(i)

#     c. 请循环输出所有的key和value
# for k,v in dic.items():
#     print(k,v)

#     d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
# dic['k4'] = 'v4'
# print(dic)

# dic.setdefault('k4','v3')
# print(dic)

#     e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典
# dic['k1'] = "alex"
# print(dic)

#     f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
# dic["k3"].append(44)
# print(dic)


#     g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典

# dic['k3'].insert(1,18)
# print(dic)

# 3,
# av_catalog = {
#     "欧美":{
#         "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
#         "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
#         "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
#         "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
#     },
#     "日韩":{
#         "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
#     },
#     "大陆":{
#         "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
#     }
# }

# 1,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。
# av_catalog["欧美"]["www.youporn.com"].insert(1, '量很大')
# print(av_catalog)

# 2,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
# del av_catalog["欧美"]["x-art.com"][1]
# print(av_catalog)

# 4,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。
#av_catalog["日韩"]["tokyo-hot"][1] = av_catalog["日韩"]["tokyo-hot"][1].upper()

# 5,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
#av_catalog["大陆"]['1048'] = ['一天就封了']

# 6,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。
# av_catalog["欧美"].pop("letmedothistoyou.com")

# 7,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
#av_catalog["大陆"]['1024'][0] = av_catalog["大陆"]['1024'][0] + '可以爬下来'

# 4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}

# li = "k:1|k1:2|k2:3|k3:4"
# dic = {}
# for i in li.split('|'):
#     dic.setdefault(i.split(":")[0],i.split(":")[1])
# print(dic)

# 5、元素分类有如下值li= [11,22,33,44,55,66,77,88,99,90],
# 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}

# li= [11,22,33,44,55,66,77,88,99,90]
# dic = {'k1':[],'k2':[]}
# for i in li:
#     if i > 66:
#         dic['k1'].append(i)
#     elif i < 66:
#         dic['k2'].append(i)
#     else:
#         pass
# print(dic)


# 6、输出商品列表,用户输入序号,显示用户选中的商品
#     商品 li = ["手机", "电脑", '鼠标垫', '游艇']
# 要求:
# 1:页面显示 序号 + 商品名称,如:
#          1 手机
#          2 电脑
#
# 2: 用户输入选择的商品序号,然后打印商品名称
# 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
# 4:用户输入Q或者q,退出程序。
#
# db = {
#     '北京':{
#         '石景山':{},
#         '东城':{},
#     },
#     '上海':{
#         '浦东':{},
#         '浦西':{},
#     },
#     '杭州':{
#         '萧山':{},
#     }
# }
# path = []
#
# while True:
#     temp = db
#     for item in path:
#         temp = temp[item]
#     print('当前节点的所有子节点:', list(temp.keys()),'\n')
#     choice = input('1:添加节点; 2:查看节点(Q退出/返回上一级B)\n>>>')
#     if choice == '1':
#         k = input('请输入要添加的子节点名称:')
#         if k in temp:
#             print('节点已经存在')
#         else:
#             temp[k] = {}
#     elif choice == '2':
#         k = input('请输入要查看的子节点:')
#         if k in temp:
#             path.append(k)
#         else:
#             print('子节点名称错误')
#     elif choice.lower() == 'b':
#         if path:
#             path.pop()
#     elif choice.lower() == 'q':
#         break
#     else:
#         print('输入不合法')

 

posted on 2018-04-23 21:19  sun_man  阅读(549)  评论(0编辑  收藏  举报