《笨办法学 python3》系列练习计划——32: 循环和列表

最近几题的新知识是不是有点多?没关系今天这题也有不少新东西 :P 。当我们遇到不懂的地方把它们记录下来,就先放放回头再看,还不行就再放放再看看,慢慢来直到弄懂。

题目

有了 if 语句和布尔表达式我们的程序能够智能化处理不同的情况,但是我们还需要它能重复完成一些繁琐的任务,这就是本题的一个重点 for-loop (for 循环),至于它是如何工作的,需要我们在程序中体会。

新知识

让我们先来说说其他的新知识——列表(list)。它的意思很容易理解:按照顺序把东西放在一个容器里面。
而定义列表也很简单,和字符串、参数类似:用方括号括起来,用逗号隔开不同的东西。就像这些:

hairs = ['brown', 'blond', 'red']
eyes = ['brown', 'blue', 'green']
weights = [1, 2, 3, 4]

加分练习

  1. 注意一下 range 的用法。查一下 range 函数并理解它
  2. 在第 29 行(我的答案),你可以直接将 elements 赋值为 range(0, 6) ,而无需使用 for 循环?
  3. 在 python 文档中找到关于列表的内容,仔细阅读一下,除了 append 以外列表还支持哪些操作?




我的答案

32.0 基础练习

# 定义列表
the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']    # 列表内可以放入不同类型的数据

# this first kind of for-loop goes through a list
# 首选 for 循环一个列表
for number in the_count:
    print("This is count %d" % number)

# same as above 和上面一样
for fruit in fruits:
    print("A fruit of type: %s" % fruit)

# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
# 对于混合列表我们需要注意使用 %r 因为其中可能有各种不同类别的东西
for i in change:
    print("I got %r" % i)

# we can also build lists, first start with an empty one
# 演示如何创建一个空列表
elements = []
# 另一种方法
elements = list()

# then use the range function to do 0 to 5 counts
# 使用函数 range 创建一个包含整数 0 到 5 的列表
for i in range(0, 6):
    print("Adding %d to list." % i)
    # append is function that lists understand.
    # "append" 是列表的一个方法(函数)
    elements.append(i)

# now we can print them out too 打印出来看看
for i in elements:
    print("Element was: %d" % i)

这里写图片描述

32.1 range 的用法

最简单的变法就是查看帮助文档了,还记得我们用过的两种方法么?
( ↓↓↓↓ 刮开查看 ↓↓↓↓ )

命令符中:python -m pydoc range
python 交互模式中:help(range)

我们来摘抄一下:

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
 |
 |  Return an object that produces a sequence of integers from start (inclusive)
 |  to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
 |  start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
 |  These are exactly the valid indices for a list of 4 elements.
 |  When step is given, it specifies the increment (or decrement).
 |
 |  省略 ...

创建 range 函数的实例
range 函数会返回一个数字序列。它最多接受 3 个参数

  • start:启始值(被包含),默认是 0
  • stop:结束值(不包含),必填
  • step:步长,默认是1,不可为0

例如:
range(5) 表示从 0 开始,到 5 截止,步长为 1 的一组数字。包含 0,1,2,3,4,5 五个数字
range(1, 5) 表示从 1 开始,到 5 截止,步长为 1 的一组数字。包含 1,2,3,4 四个数字
range(0, 5, 2) 表示从 0 开始,到 5 截止,步长为 2 的一组数字。包含 0, 2, 4 三个数字

从 range 中取出数字
我们在 python 交互环境中执行 range 函数其实并不能直接得到所有的数字它看齐来是这样:
这里写图片描述
如果我们想获取第 n 个数字可以这样:

x = range(0, 20, 3)

# 还记得我们提过 python 是怎么数数的么?
# python 从 0 开始数
# 所以 x 中的 第一 个和 第二 个数字是?
print(x[0])
print(x[1])

32.2 不使用 for-loop ,直接为 elements 赋值为 range(6)

试试看喽
这里写图片描述
虽然最 for 循环终结果是没问题,但是我们单独打印 elements 的时候却是 range object (range 对象)而非我们期待的列表。至少我是这么期待的。
加在括号里面呢?(好主意)
这里写图片描述

看来不行啊!不甘心啊,再试试夹带的私货 list()
这里写图片描述
哈哈 ,还是私货厉害

32.3 了解列表 list

(不能吐槽,不能说不喜欢查文档!!!)
轻车熟路啦啊~ 先不管双下划线的方法

>>> help(list)
Help on class list in module builtins:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items
 |
 |  Methods defined here:
 |
 |  append(...)
 |      L.append(object) -> None -- append object to end
 |                                  把对象添加到列表的末尾。
 |
 |  clear(...)
 |      L.clear() -> None -- remove all items from L
 |                           清空列表
 |
 |  copy(...)
 |      L.copy() -> list -- a shallow copy of L
 |                          浅拷贝,如列表中还有列表,则子列表改变后,
 |                          浅拷贝的对象也会改变。深拷贝则不会
 |
 |  count(...)
 |      L.count(value) -> integer -- return number of occurrences of value
 |                                   统计、计数。反之列表中有多少个要统计的值
 |
 |  extend(...)
 |      L.extend(iterable) -> None -- extend list by appending elements from the iterable
 |                                    用 appedn 的方法吧一个可循环的内容添加到列表末尾,
 |                                    例如另一个列表或 range()
 |
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value.
 |      Raises ValueError if the value is not present.
 |      和 range.index() 类似,返回列表中某个值的索引位置 
 |      例如 ['a', 'b', 'c'].index('b') 则返回值的索引1
 |
 |  insert(...)
 |      L.insert(index, object) -- insert object before index
 |                                 在索引位置插入一个值
 |
 |  pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.
 |      从列表中抛出索引位置的值(抛出后从列表中删除),默认是最后一个值
 |
 |  remove(...)
 |      L.remove(value) -> None -- remove first occurrence of value.
 |      Raises ValueError if the value is not present.
 |      删除第一次出现的值 例 [1,2,3,1,2,3].remove(2) 则删除索引位置 1 的值
 |
 |  reverse(...)
 |      L.reverse() -- reverse *IN PLACE*
 |                     将列表首位顺序对调
 |
 |  sort(...)
 |      L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
 |             对列表排序,默认是升序。有两个可选参数 
 |                 key 指定排序依据。 如 len长度, int数字, str字符
 |                 reverse 是否倒序排列

ok 完工




返回目录

《笨办法学 python3》系列练习计划——目录

猜你喜欢

转载自blog.csdn.net/aaazz47/article/details/79741726