《python从入门到项目实践》第六章 列表和元组 //有一个课后答案

目录

序列

切片

乘法

检查 in

序列有关函数

列表

遍历列表

添加、修改和删除列表元素

列表统计 次数、下标、求和

排序  sort()

生成列表 /列表推导式

元组 tuple

推导式与列表不同


python中常用5中序列结构:

列表、元组、集合、字典、字符串。

序列

切片

访问元素的一个方法

sname[start:end:step]

 包括开始位置,不包括end位置,step默认为1

nba = ["迈克尔•乔丹","比尔•拉塞尔","卡里姆阿卜杜勒•贾巴尔","威尔特•张伯伦",
      "埃尔文•约翰逊","科比•布莱恩特","蒂姆•邓肯","勒布朗•詹姆斯","拉里•伯德",
      "沙奎尔•奥尼尔"]
print(nba[1:5])     # 获取第2个到第5个元素
print(nba[0:5:2])   # 获取第1个、第3个和第5个元素

['比尔•拉塞尔', '卡里姆阿卜杜勒•贾巴尔', '威尔特•张伯伦', '埃尔文•约翰逊']
['迈克尔•乔丹', '卡里姆阿卜杜勒•贾巴尔', '埃尔文•约翰逊']

 nba[:]或者nba表示输出所有。

相同类型序列可以直接相加  +  ,,,但是不能是列表加元素

num = [7,14,21,28,35,42,49,56]
nba = ["史蒂芬•库里","克莱•汤普森","马努•吉诺比利","凯文•杜兰特"]
print(num + nba)

[7, 14, 21, 28, 35, 42, 49, 56, '史蒂芬•库里', '克莱•汤普森', '马努•吉诺比利', '凯文•杜兰特']

num+“开心就好”     这是错误的

乘法

就是重复n遍,也可以用来创建指定长度列表

phone = ["huawei","xiaomi","iphone"]
print(phone*3)

emptylist = [None]*5
print(emptylist)

['huawei', 'xiaomi', 'iphone', 'huawei', 'xiaomi', 'iphone', 'huawei', 'xiaomi', 'iphone']
[None, None, None, None, None]

检查 in

phone = ["huawei","xiaomi","iphone"]
print(phone)
print("huawei" in phone)

['huawei', 'xiaomi', 'iphone']
True

序列有关函数

len(listname):返回列表长度

min(listname):返回列表最小元素

max(listname):返回列表最大元素

sum():求和

sorted():排序

list():将序列转为列表

str():将序列转为字符串

reversed():反向序列中的元素

enumerate()将序列组合为一个索引序列,多用在for循环中

--------------------------------------------------------------------------------------

列表

del listname :删除列表

遍历列表

for item in listname

#输出 item
for index,item in enumerate(listname):
    #输出index 与 item
print("2018年俄罗斯世界杯四强:")
team = ["法国","比利时","英格兰","克罗地亚"]
for index,item in enumerate(team):
    print(index + 1,item)

2018年俄罗斯世界杯四强:
1 法国
2 比利时
3 英格兰
4 克罗地亚

添加、修改和删除列表元素

 添加 insert()与append()

phone = ["摩托罗拉","诺基亚","三星","OPPO"]
print(len(phone))    # 获取列表的长度
phone.append("iPhone")
print(len(phone))        # 获取列表的长度
print(phone)

4
5
['摩托罗拉', '诺基亚', '三星', 'OPPO', 'iPhone']

 

phone = ["摩托罗拉","诺基亚","三星","OPPO"]
print(len(phone))    # 获取列表的长度
phone.insert(2,"iPhone")
print(len(phone))        # 获取列表的长度
print(phone)

4
5
['摩托罗拉', '诺基亚', 'iPhone', '三星', 'OPPO']

 修改元素 

verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一人对抗西班牙队"]
print(verse)
verse[2] = "梅西、C罗相约回家"    # 修改列表的第3个元素
print(verse)

['德国队小组赛回家', '西班牙传控打法还有未来吗', 'C罗一人对抗西班牙队']
['德国队小组赛回家', '西班牙传控打法还有未来吗', '梅西、C罗相约回家']

 删除元素  del       remove

verse = ["德国队小组赛回家","西班牙传控打法还有未来吗","C罗一人对抗西班牙队"]
del verse[-1]
print(verse)

['德国队小组赛回家', '西班牙传控打法还有未来吗']

 name.remove(obj)   删除指定元素

列表统计 次数、下标、求和

listname.count(obj)

listname.index(obj)    obj首次出现的下标,不存在则抛出异常

sum(iterable[,start])  求和 iterable表示要求和的列表

grade = [98,99,97,100,100,96,94,89,95,100]    # 10名学生语文成绩列表
total = sum(grade)                              # 计算总成绩
print("Python理论总成绩为:",total)

Python理论总成绩为: 968

 

grade = [98,99,97,100,100,96,94,89,95,100]    # 10名学生语文成绩列表
total = sum(grade,10)                             
print("Python理论总成绩为:",total)

Python理论总成绩为: 978

grade = [98,99,97,100,100,96,94,89,95,100]    # 10名学生语文成绩列表
total = sum(grade[0:1],10)
print("Python理论总成绩为:",total)

 Python理论总成绩为: 108

排序  sort()

与sorted()有区别,sorted()会建立一个副本

listname.sort(key=None, reverse=False)

key 表示指定一个从每个列表元素中提取一个用于比较的键(key=str.lower  表示在排序是不区分字母大小写)

False表示升序,True表示降序

grade = [98,99,97,100,100,96,94,89,95,100]    # 10名学生Python理论成绩列表
print("原列表:",grade)
grade.sort()                                     # 进行升序排列
print("升  序:",grade)
grade.sort(reverse=True)                        # 进行降序排列
print("降  序:",grade)

原列表: [98, 99, 97, 100, 100, 96, 94, 89, 95, 100]
升  序: [89, 94, 95, 96, 97, 98, 99, 100, 100, 100]
降  序: [100, 100, 100, 99, 98, 97, 96, 95, 94, 89]

生成列表 /列表推导式

import random                                           #导入random标准库
randomnumber = [random.randint(10,100) for i in range(10)]
print("生成的随机数为:",randomnumber)
price = [1200,5330,2988,6200,1998,8888]
sale = [int(x*0.5) for x in price]
print("原价格:",price)
print("打五折的价格:",sale)
price = [1200,5330,2988,6200,1998,8888]
sale = [x for x in price if x>5000]
print("原列表:",price)
print("价格高于5000的:",sale)

生成的随机数为: [73, 82, 43, 31, 40, 60, 83, 29, 41, 75]
原价格: [1200, 5330, 2988, 6200, 1998, 8888]
打五折的价格: [600, 2665, 1494, 3100, 999, 4444]
原列表: [1200, 5330, 2988, 6200, 1998, 8888]
价格高于5000的: [5330, 6200, 8888]

元组 tuple

用括号(非必须) 包围,逗号分隔的元素

verse1 = ("世界杯冠军",)
print("verse1的类型为",type(verse1))
verse2 = ("世界杯冠军")
print("verse2的类型为",type(verse2))

verse1的类型为
verse2的类型为

创建元组

print(tuple(range(10,20,2)))

(10, 12, 14, 16, 18)

 可以切片 可以用 for 遍历

推导式与列表不同

import random                                  #导入random标准库
randomnumber = (random.randint(10,100) for i in range(10))
randomnumber = tuple(randomnumber)           # 转换为元组
print("转换后:",randomnumber)

转换后: (75, 93, 65, 71, 58, 82, 49, 73, 71, 72)

 

number = (i for i in range(3))
print(number.__next__())      # 输出第1个元素
print(number.__next__())      # 输出第2个元素
print(number.__next__())      # 输出第3个元素
number = tuple(number)  # 转换为元组
print("转换后:",number)

0
1
2
转换后: ()

 

number = (i for i in range(4))     # 生成生成器对象
for i in number:                    # 遍历生成器对象
    print(i,end=" ")                # 输出每个元素的值
print(tuple(number))                # 转换为元组输出

0 1 2 3 ()

遍历后,原生成器对象已经不存在了! 

********************************************************

模拟购物车购物过程答案

list1=[]
for i in range(5):
    list1.append(input("请输入商品编号和商品名称进行商品入库,每次只能输入一件商品:\n"))
print(list1[:])
# print("请输入要购买的商品的编号:")
list2 = []
p = 0
for ji in range(0, 100):
    num = input("请输入要购买的商品的编号:\n")
    if num != "q":
        for item in list1:
             if item.find(num) == 0:
                list2.append(item)
                print("商品已添加到购物车,请继续添加要购买商品的商品编号")
    else:
        p = 1
        break
    if p == 1:
        break
print(list2)

 

你可能感兴趣的:(Python)