首页 > temp > python入门教程 >
-
Day2:列表与字典
1.列表:使用[ ]存储
切片:
取列表中的某值,其中元素从0开始,如:取第一个元素,则 列表名[0]
取列表中的某些连续值,如:取第三和第四个元素,则 列表名[2:4] “顾头不顾尾”
取列表中的某些值,如:从头取到尾且步长为2,则 列表名[起始位置:终止位置:步长]
取列表中的最后一个值,则 列表名[-1]
取列表中的最后3个值,则 列表名[-3:](实际上从头取的时候前方也可以省略掉)
插入:
在最后添加元素 列表名.append(元素)
在固定位置添加元素 列表名.insert(位置号,元素)
改写:
改写某元素: 列表名[位置] = 元素
删除:
删除某元素 列表名.remove(元素) 或 del 列表名[位置号] 或 列表名.pop(位置号),使用pop时若不写位置则默认删除最后一个元素
索引:
print(列表名.index(元素名)) 输出位置
print(列表名.[列表名.index(元素名)] 输出该元素
计数:
列表名.count(元素名)
清空列表:
列表名.clear()
反转列表:
列表名.reverse()
排序列表:
列表名.sort() 排序规则按ASCII码排序规则制定
合并列表:
列表名.extend(要合并的列表名) 执行操作后被合并的列表仍存在,要删除的话需要del 该列表
1 import copy 2 names = ["Sun", "Li", "Ji", [1, 3, 5], "Fan"] 3 4 print(names[::3]) 5 for i in names: 6 print(i) 7 name2 = copy.copy(names) # 浅copy 8 print(names, name2) 9 name2[2] = "吉" 10 name2[3][1] = 4 11 print(names, name2) 12 names.append("Lei") # 在列表末尾插入 13 names.insert(1, "Zhang") # 在列表位置1处插入 14 names[2] = "Xie" # 替换 15 names.remove("Sun") # 删除 16 names.insert(0, "Sun") 17 del names[0] # 删除 18 names[0] = "Sun" 19 names.pop(0) # 删除 20 print(names) 21 print(names.index("Ji")) 22 print(names[names.index("Ji")]) 23 print(names[1], names[2]) 24 print(names[0:2]) # 切片 25 print(names[3]) # 切片 26 print(names[-1]) # 切片 27 print(names[-3:]) # 切片 28 names2 = ['1', '2', '3'] 29 names.extend(names2) # 扩展(合并)列表 30 print(names) 31 names.reverse() # 翻转列表 32 print(names) 33 '''names.sort() # 表内数据类型不同时不能排序 34 print(names)''' 35 names.clear() # 清空列表 36 print(names)
1 ['Sun', [1, 3, 5]] 2 Sun 3 Li 4 Ji 5 [1, 3, 5] 6 Fan 7 ['Sun', 'Li', 'Ji', [1, 3, 5], 'Fan'] ['Sun', 'Li', 'Ji', [1, 3, 5], 'Fan'] 8 ['Sun', 'Li', 'Ji', [1, 4, 5], 'Fan'] ['Sun', 'Li', '吉', [1, 4, 5], 'Fan'] 9 ['Xie', 'Ji', [1, 4, 5], 'Fan', 'Lei'] 10 1 11 Ji 12 Ji [1, 4, 5] 13 ['Xie', 'Ji'] 14 Fan 15 Lei 16 [[1, 4, 5], 'Fan', 'Lei'] 17 ['Xie', 'Ji', [1, 4, 5], 'Fan', 'Lei', '1', '2', '3'] 18 ['3', '2', '1', 'Lei', 'Fan', [1, 4, 5], 'Ji', 'Xie'] 19 []
2.元组
只有两个命令 count , index
3.字符串常用操作
1 name = "My name \tis {name}, and I'm {age} years-old." 2 3 print(name.capitalize()) # 首字母大写,其余小写 4 print(name.count("s")) # 字符串中某字符出现的次数,可指定开始结束位置 5 print(name.casefold()) # 将所有大写字母转换为小写,类似lower()方法 6 print(name.center(50, "-")) # 打印50个字符,不够的用-补齐,且将name放于中间 7 print(name.endswith("C")) # 判断字符串是否以指定后缀结尾,是True否False,可指定开始结束位置 8 print(name.startswith("M")) # 判断字符串是否以指定前缀开始,是True否False,可指定开始结束位置 9 print(name.expandtabs(tabsize=0)) # 将字符串中的\t转换为指定数量的空格 10 print(name.find("name")) # 索引字符(串)的开始位置-可用于字符串切片 11 print(name.format(name='SJC', age=18)) # 格式化 12 print(name.format_map({'name': 'SJC', 'age': 18})) # 可传字典格式 13 print(name.isalnum()) # 检测字符串是否由字母和数字组成 14 print(name.isalpha()) # 检测字符串是否只由字母组成 15 print(name.isdecimal()) # 检查字符串是否只包含十进制字符 16 print(name.isdigit()) # 检测字符串是否只由数字组成 17 print('Name'.isidentifier()) # 判断是否是一个合法的标识符(变量名) 18 print(name.islower()) # 检测字符串是否由小写字母组成 19 print(name.isnumeric()) # 检测字符串是否只由数字组成。这种方法是只针对unicode对象。 20 print(name.istitle()) # 检测字符串是否是标题格式 21 print(name.isupper()) # 检测字符串是否由大写字母组成 22 print(','.join(['1', '2', '3'])) # 将序列(字符串、列表等)中的元素以指定的字符连接生成一个新的字符串 str.join(sequence) 23 print(name.ljust(50, "*")) # 打印50个字符,不够的用*补齐,将name放于前方 24 print(name.rjust(50, "@")) # 打印50个字符,不够的用*补齐,将name放于后方 25 print(name.lower()) # 大写换小写 26 print(name.upper()) # 小写换大写 27 print("\nSJC\n".lstrip()) # 从左侧去除空格或回车 28 print("\nSJC\n".rstrip()) # 从右侧去除空格或回测 29 print("\nSJC\n".strip()) # 去除两侧空格或回车 30 p = str.maketrans("SJC", "123") 31 # 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标 32 # 两个字符串的长度必须相同,为一一对应的关系 33 print("SJC".translate(p)) # 用p的映射关系转换字符SJC后输出 34 print("baidu.com".partition(".")) # 据指定的分隔符将字符串进行分割 35 # 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串 36 print('python is funny'.replace('n', '*', 1)) # 替换且可指定最大替换次数 37 print(name.rfind('a')) # 从左向右查找,找到最右侧的a并返回其位置 38 print(name.rsplit()) 39 print("1+2+3+4".split("+")) # 将字符串按照要求分割为列表(默认为空字符,可指定其他字符),可指定分割次数 40 print(name.swapcase()) # 大小写互化 41 print(name.title()) # 化成标题格式 42 print(name.zfill(50)) # 从左侧用0填充字符串至指定长度
1 My name is {name}, and i'm {age} years-old. 2 2 3 my name is {name}, and i'm {age} years-old. 4 ---My name is {name}, and I'm {age} years-old.--- 5 False 6 True 7 My name is {name}, and I'm {age} years-old. 8 3 9 My name is SJC, and I'm 18 years-old. 10 My name is SJC, and I'm 18 years-old. 11 False 12 False 13 False 14 False 15 True 16 False 17 False 18 False 19 False 20 1,2,3 21 My name is {name}, and I'm {age} years-old.****** 22 @@@@@@My name is {name}, and I'm {age} years-old. 23 my name is {name}, and i'm {age} years-old. 24 MY NAME IS {NAME}, AND I'M {AGE} YEARS-OLD. 25 SJC 26 27 28 SJC 29 SJC 30 123 31 ('baidu', '.', 'com') 32 pytho* is funny 33 36 34 ['My', 'name', 'is', '{name},', 'and', "I'm", '{age}', 'years-old.'] 35 ['1', '2', '3', '4'] 36 mY NAME IS {NAME}, AND i'M {AGE} YEARS-OLD. 37 My Name Is {Name}, And I'M {Age} Years-Old. 38 000000My name is {name}, and I'm {age} years-old. 39 40 Process finished with exit code 0
4.字典:一种key – value 的数据类型,使用就像上学用的字典,通过笔画、字母来查对应页的详细内容
1 info = { 2 'stu1101': "SJC", 3 'stu1102': "WRR", 4 'stu1103': "WK" 5 }
4.1 字典操作
增改:
字典名[key] = value 若键值存在,则改数据;若不存在,则字典内新增一条
删除:
del 字典名[key]/字典名.pop(key)
查找:
字典名[key] 如果key不存在会报错
字典名.get(key) 通过print输出存在则返回值,不存在则返回None
‘key’ in 字典名-通过print输出False 或 True看key是否存在
查找字典内全部数据:
字典名.values()
查找字典内全部键值:
字典名.keys()
字典名.setdefault(“key”,”value”):
若存在key则返回其值,若不存在则创建新key与值
字典名.update(字典名2)
合并字典,有相同key则覆盖原字典内value
字典名.items()
字典转列表
dict.fromkeys([6,7,8],”test”) 初始化一个字典,有三个key 6, 7 ,8且values全部为test
1 info = { 2 'stu1101': "SJC", 3 'stu1102': "WRR", 4 'stu1103': "WK" 5 } 6 print(info) 7 print(info['stu1101']) # 如果key不存在会报错 8 info['stu1101'] = "ZYH" # key存在则改其value不存在则新增 9 print(info) 10 print("stu1104" in info) # key存在返回True否则返回False 11 print(info.get('stu1104')) # 如果key不存在会返回None 12 print(info.values()) # 输出所有value 13 print(info.keys()) # 输出所有key 14 print(info.items()) # 字典转列表输出 15 16 info2 = { 17 'stu1105': "LY", 18 'stu1106': "SJC" 19 } 20 info.update(info2) # 字典合并有交叉则覆盖 21 print(info) 22 info.setdefault("stu1104", "ZJL") # key存在则返回其现有值不存在则创建新值及其value 23 print(info)
1 {'stu1101': 'SJC', 'stu1102': 'WRR', 'stu1103': 'WK'} 2 SJC 3 {'stu1101': 'ZYH', 'stu1102': 'WRR', 'stu1103': 'WK'} 4 False 5 None 6 dict_values(['ZYH', 'WRR', 'WK']) 7 dict_keys(['stu1101', 'stu1102', 'stu1103']) 8 dict_items([('stu1101', 'ZYH'), ('stu1102', 'WRR'), ('stu1103', 'WK')]) 9 {'stu1101': 'ZYH', 'stu1102': 'WRR', 'stu1103': 'WK', 'stu1105': 'LY', 'stu1106': 'SJC'} 10 {'stu1101': 'ZYH', 'stu1102': 'WRR', 'stu1103': 'WK', 'stu1105': 'LY', 'stu1106': 'SJC', 'stu1104': 'ZJL'}
4.2 多级字典
1 world_map = { 2 "China": { 3 "Hebei": ["Northeast", "flat area"], 4 "Yunnan": ["Southwest", "hilly land"] 5 }, 6 "Japan": { 7 "Tokyo": ["Capital", "qqq"], 8 "Osaka": ["South", "ppp"] 9 }, 10 "America": { 11 "New York": ["Famous of interest", "Statue of Liberty"], 12 "Washington": ["Capital", "White House"] 13 } 14 } 15 world_map["China"]["Hebei"][1] = "Nice" 16 print(world_map)
4.3 循环字典
1 for i in info: # 循环字典,高效,推荐 2 print(i) # 只打印key 3 print(i, info[i]) # 打印key及其value 4 5 for k, v in info.items(): # 先将字典转为列表,数据量大时耗时长,不推荐 6 print(k, v) # 打印key及其value
5.练习与作业
# 购物车程序
# 1.启动程序后,让用户输入工资,然后打印商品列表
# 2.允许用户根据商品编号购买商品
# 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
# 4.可随时退出,退出时,打印已购买商品和余额
S1: 自我练习版
1 # 购物车程序 2 # 1.启动程序后,让用户输入工资,然后打印商品列表 3 # 2.允许用户根据商品编号购买商品 4 # 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 5 # 4.可随时退出,退出时,打印已购买商品和余额 6 import sys 7 8 goods = ["Phone", "Necklace", "Bike", "MP4", "Ipad", "Cup"] 9 price = [2299, 8200, 1088, 888, 2469, 46] #存两个表,需要一一对应,不方便 10 pychased = [] 11 price2 = price.copy() 12 price2.sort() 13 salary = int(input("Please tell me your salary here:")) #强转,输入字符串会报错,不推荐 14 doc = salary 15 while salary >= (price2[0]): 16 for i in range(1, 7): 17 print(i, ':', goods[i-1], '\t', price[i-1]) 18 m = input("Please input goods number to buy it(Or input 'q' to exit):") 19 if m != 'q': 20 j = int(m) 21 if j < 1 or j > 7: 22 print("Wrong goods number,please input again") 23 elif salary >= price[j-1]: 24 balance = salary - price[j-1] 25 salary = balance 26 pychased.append(goods[j-1]) 27 print(f"You have bought {goods[j-1]}, and your balance is {balance}.") 28 else: 29 print("You don't have enough money to buy this good, please try another cheaper one!") 30 else: 31 if salary >= doc: 32 print(f"You have bought nothing, and your balance is {salary}, welcome again!") 33 sys.exit() 34 else: 35 print(f"You have bought {pychased}, and your balance is {salary}, welcome again!") 36 sys.exit() 37 else: 38 print("You don't have enough money to buy any good, please save more money!")
补充知识点:
isdigit() 方法:
#Python isdigit() 方法检测字符串是否只由数字组成,如果字符串只包含数字则返回 True 否则返回 False。
If salary.isdigit():
salary = int(salary)
enumerate函数:
# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
len()方法:
返回对象长度
输出列表中的所有元素,每个元素占一行:
for p in 列表:
print(p)
S2:依据新增知识改进版
1 # 购物车程序 2 # 1.启动程序后,让用户输入工资,然后打印商品列表 3 # 2.允许用户根据商品编号购买商品 4 # 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 5 # 4.可随时退出,退出时,打印已购买商品和余额 6 7 import sys 8 9 goods = [["Phone", 2980], 10 ["Necklace", 8200], 11 ['Cup', 64], 12 ['Bike', 543], 13 ['Ipad', 3987], 14 ['Computer', 5999] 15 ] 16 shopping_cart = [] 17 price = [] 18 j = len(goods) 19 for i in range(0, j): 20 price.append(goods[i][1]) 21 price.sort() 22 salary = input("Please input your salary:") 23 if salary.isdigit(): 24 salary = int(salary) 25 while True: 26 for i, item in enumerate(goods): 27 print(i + 1, item) 28 if salary >= price[0]: 29 choice = input("Please input the goods number you want to buy(Or input q to quit):") 30 if choice.isdigit(): 31 choice = int(choice) 32 if 0 < choice <= j: 33 b_goods = goods[choice-1][0] 34 b_price = goods[choice-1][1] 35 if salary >= b_price: 36 salary -= b_price 37 shopping_cart.append(b_goods) 38 print(f"You have bought {b_goods}, " 39 f"and your balance is {salary}.") 40 else: 41 print("Your balance isn't enough, try another cheaper goods!") 42 else: 43 print("Invalid goods number!") 44 elif choice == 'q': 45 print("——————————shopping list————————————") 46 for p in shopping_cart: 47 print(p) 48 print(f'And your balance is {salary}', '\n', "Welcome next!") 49 sys.exit() 50 else: 51 print("Invalid input") 52 else: 53 print("Your balance is too low to buy anything here!") 54 sys.exit() 55 else: 56 print("Invalid input!")
出处:
https://www.cnblogs.com/bitsjc/p/13622331.html