前面我们提到的列表都是关于字符串的,今天我们在来看下数字相关的列表。
在python中使用range()函数可以很方便的帮助我们生成一系列的数字,大家可以向下面一样来使用:
#use range
for value in range(1,5):
print(value);
上面的代码好像是从1开始打印到5,实际上它只会打印到4就结束:
1
2
3
4
在这个示例中,range()打印了1-4的数字,这种现象在编程语言中是十分常见的差一行为的结果。函数range()从你指定的数字1开始,并在你指定的第二个数字5结束,因此我们的输出就不包含数字5.
下面是python关于range函数的帮助文档:
class range(Sequence[int])
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函数的时候没有达到你预期的输出,那么试着对输出范围进行+1或者-1的操作。
上面的例子只是告诉我们怎么使用range函数,如果我想把range函数生成的结果保存在列表中以备后续使用,我们该怎么办呢?
要想创建数字列表,在python中我们可以借助list()来完成我们期望的功能。
#use range
numbers = list(range(1,10));
print(numbers);
结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
大家也可能都发现了,上面的例子中range生成的数字都是依次加1产生的结果,那么如果我们每个数字都相差2或者3。。。range函数还能实现我们的要求吗?
答案是:可以。在range函数中我们可以指定每次增长的步长,我们通过实际例子来说明它该怎么使用。
我们希望打印1-10内的所有偶数:
#use range
numbers = list(range(2,10,2));
print(numbers);
在这个例子中,函数range从2开始,每次增加2,直到超过了终止值10然后程序停止,输出如下:
[2, 4, 6, 8]
既然提到了数字,那么对于数字的处理肯定少不了,这里我们简单介绍几个python中常见的处理数字的函数。
# use range
numbers = list(range(2, 10, 2));
# print min number in numbers
print(min(numbers));
# print max number in numbers
print(max(numbers));
# print sum number in numbers
print(sum(numbers));
输出如下:
2
8
20
这里只有三个函数,大家看程序也是一目了然就知道它的意思。min获取列表中最小的数字,max获取列表中最大数字,而sum则是对列表进行求和处理。
在提下一个概念之前,我们来看一下这么一个需求:
将1-10的数字的平方加入到列表中,并打印
很常规的思路:
1.创建一个空列表
squares = [];
2.使用循环依次对1-10的数字进行平方操作,然后加入列表,最后进行打印
for value in range(1,11):
square = value ** 2;
squares.append(square);
print(square);
好了,让我们看下输出:
1
4
9
16
25
36
49
64
81
100
最后我们打印一下squares 列表的内容来验证是否和我们期望的结果一致:
print(squares);
打印列表如下:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
很显然,两者的结果是一样的。
看到这里,想必有的朋友会说这代码太麻烦了,我在使用其他的编程语言的时候两行代码就写完了,那么在python中难道就不能实现吗?
可以,python中你可以使用列表解析来让你只需编写一行代码就能生成这样符合你期望的列表。
这里提到了列表解析,那么什么是列表解析呢?
列表解析简单来说就是将for循环和创建新元素的代码合并为一行,并自动附加新元素。看这样的说明估计大伙还是没有一个清楚的理解,我们通过示例来说明:
squares = [ value**2 for value in range(1,11)];
print(squares);
要想使用这种方式,首先你的指定一个描述性的列表名,也就是你需要的列表名称,这里就是squares。然后指定一个左方括号,并且定义一个表达式,用于生成你要存储到列表中的值。在这个示例中:value**2就是我们的表达式,它用来计算平方值。接着提供一个for循环来个表达式提供值,最后记得加上右方括号结束哦。
这里大家要留意一下,for循环后面是没有冒号(:)的,这点一定不能忘记。
结果和我们前面看到的平方数列表是相同的:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]