第4章 操作列表

1 循环概述

循环能够对列表的每个元素都采取一个或一系列相同的措施,高效处理任何长度的列表。

  • 循环让计算机自动完成重复工作
  • 每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。因此,我们可对列表中的每个值执行任意次数的操作
  • for循环结束后,我们需要提供总结性输出或者接着执行程序必须要完成的其他任务
  • 在for循环后,没有缩进的代码都只执行一次,而不会重复执行
  • Python根据缩进来判断代码行和前一个代码行的关系
a = '12345'
for item in a:
    print(item)
b = [1, 2, 3, 4]
for item in b:
    print(item)
c = ['a', 'b', 'c', 'd']
for item in c:
    print(item)
d = {1: 'a', 2: 'b', 3: 'c'}
for key, value in d.items():
    print('{}={}'.format(key, value))
e = {1, 2, 3, 5, 8}
for item in e:
    print(item)
for item in range(1, 20, 4):
    print(item)

2 编写循环时常见的错误

  • 忘记缩进:对于for语句后面且属于循环组成部分的代码行,没有缩进。
  • 逻辑错误:从语法上看,程序员书写的代码是合法的,但是由于存在逻辑错误,所得到的的结果并不符合预期。
  • 不必要的缩进
  • 遗漏冒号
# break
for i in range(10):
    if i % 2 == 0:
        break
    else:
        print(i)
# continue
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

3 数值列表

列表非常适合存储数字集合

3.1 方法range()

  • range()能够生成一系列数字
  • 可以使用方法list()将range()的结果直接转化为列表
  • range()几乎能够创建任何需要的数字集
  • range()可以指定步长

4 对数字列表执行简单的统计计算

4.1 方法min()

min()找出数字列表中的最小值

4.2 方法max()

max()找出数字列表中的最大值

4.3 方法sum()

sum()算出数字列表中的总和

5 列表解析

  • 列表解析让我们只编写一行代码就能生成列表。

列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素

  • 步骤:
    1、首先,指定一个描述性的列表名
    2、然后,指定一个左方括号,并定义一个表达式,用于生成我们要存储到列表中的值
    3、接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。

6 使用列表的一部分

6.1 切片

  • 列表的部分元素在python中称为切片。
  • 要创建切片,可以指定要使用的第一个元素和最后一个元素的索引
  • 未指定第一个索引,Python将自动从列表开头开始。
  • 未指定最后一个索引,Python将自动从列表末尾开始。

6.2 复制列表

根据既有列表创建新列表。

我们可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引。这样,python就创建了一个始于第一个元素,终止于最后一个元素的切片。

7 列表小结

列表适合用于存储在程序运行期间可能变化的数据,即列表是可以修改的。

8 元组概述

  • 不能修改的值成为不可变的,不可变的列表称为元组,即一系列不可修改的元素

使用圆括号而不是方括号。

  • 定义元组后,我们可以使用索引来访问元素。
  • 元组值得元组不可修改,试图修改元组中元素的值,会导致Python返回类型错误消息。
    可以给存储元组的变量赋值
# 元组的创建
a = (1, 2, 3)
b = 1,
print(a, type(a))
print(b, type(b))
# 元组的访问
print(a[1])
print(a[1:3])
print(a[1:])
print(a[:-1])
# 获取元组的一些基本信息
tuple1 = (9, 1, -4, 3, 7, 11, 3)
print("tuple1的长度 = ", len(tuple1))
print("tuple1的最大值 = ", max(tuple1))
print("tuple1的最小值 = ", min(tuple1))
print("tuple1中3这个元素一共出现{}次".format(tuple1.count(3)))
print(tuple1.index(9))
# 元组的改变(元组中的元素不可以改变)
# tuple2 = ('a', 'c', 'd')
# 元组翻转(元组中的元素不可以改变)
# tuple3 = (1, 2, 3)
# 元组排序(元组中的元素不可以改变)
# tuple4 = (9, 1, -4, 3, 7, 11, 3)

8.1 列表和元组的比较

  • 元组是不可变的Python对象,存储在固定的一块内存。
  • 列表是可变的Python对象,需要两块内存存储空间,一块用来固定实际的列表数据,一块可变的空间用于扩展。

结论:元组的创建和访问比列表快,但是不如列表灵活。

9 PEP 8(设置代码格式)

Python改进提案(Python Enhancement Proposal, PEP)

动手试一试

4-1 比萨:

pizzas = ['new york style', 'chicago stycle', 'thick style']
for pizza in pizzas:
    print(pizza)
    print("I like " + pizza.title() + " pizza.\n")
print("I really love pizza!")

4-2 动物:

animals = ['dog', 'cat', 'bird']
for animal in animals:
    print(animal)
    print(animal.title() + " would make a great pet.\n")
print("Any of these animals would make a great pet!")

4-3 数到20:

for value in range(1, 21):
    print(value)

4-4 一百万:

numbers = [value * 1 for value in range(1, 1000001)]
print(numbers)

4-5 计算1~1000000的总和:

numbers = [value * 1 for value in range(1, 1000001)]
print(min(numbers))
print(max(numbers))
print(sum(numbers))

4-6 奇数:

numbers = [value * 1 for value in range(1, 21, 2)]
for number in numbers:
    print(number)

4-7 3的倍数:

numbers = []
for value in range(3, 31):
    if value % 3 == 0:
        numbers.append(value)
for number in numbers:
    print(number)

4-8 立方:

numbers = [value ** 3 for value in range(1, 11)]
for number in numbers:
    print(number)

4-9 立方解析:

numbers = [value ** 3 for value in range(1, 11)]
for number in numbers:
    print(number)

4-10 切片:

numbers = [value ** 3 for value in range(1, 8)]
for number in numbers:
    print(number)
print("The first three items in the list are:")
print(numbers[:3])
print("Three items from the middle of the list are:")
print(numbers[2:5])
print("The last three items in the list are:")
print(numbers[-3:])

4-11 你的比萨和我的比萨:

pizzas = ['new york style', 'chicago stycle', 'thick style']
for pizza in pizzas:
    print(pizza)
    print("I like " + pizza.title() + " pizza.\n")
print("I really love pizza!")
friend_pizzas = pizzas[:]
pizzas.append('pan style')
friend_pizzas.append('seafood style')
print("My friend's favorite pizzasare:")
for pizza in friend_pizzas:
    print(pizza)
print("\nMy favorite pizzas are:")
for pizza in pizzas:
    print(pizza)

4-12 自助餐:

foods = ('French cuisine', ' today\'s special', 'chef\'s special', 'continental cuisine', 'specialty')
for food in foods:
    print(food)
print("")
foods = ('French cuisine', ' today\'s special', 'chef\'s special', 'assorted porridge', 'fast food')
for food in foods:
    print(food)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值