Python入门基础(5)——数组切片与生成器

1、数组切片

li = list(range(10))  #创建数组,从0到9,步长为1
print(li)

(1)切片三个参数

# 切片 [start:end:steps]  >= start 并且 < end,steps为步长 
print(li[2:5])  # [3, 4, 5],缺省steps
print(li[:4])   # [0, 1, 2, 3],缺省start和steps
print(li[5:])   # [6, 7, 8, 9],缺省end和steps
print(li[0:20:3])   # [0, 3, 6, 9]
注意事项:如果start缺省,则从0开始;如果end缺省,则一直到末尾;如果steps缺省,则步长默认为1
 

(2)负值怎么处理

# 负值怎么处理?
print(li[5: -2])    # [5, 6, 7],倒数第二为结束
print(li[9:0:-1])   # [9, 8, 7, 6, 5, 4, 3, 2,1],负数大于0
print(li[9::-1])   # [9 ... 0],这里包含0,一直到结束
print(li[::-2]) # [9, 7, 5, 3, 1],从0开始,倒数

# 切片生成一个新的对象
print(li)   # 还是保持原样

re_li = li[::-1]  #快速反转,[9 ... 0]
print(re_li)

2、生成器

 
# 平方表,5000个数据,但是只用其中几个,这样大量的数据就浪费了
square_table = []
for i in range(5000):
    square_table.append(i * i)
for i in range(5):
    print(square_table[i])
生成器的作用:用来节省资源和空间
#根据上面的平方表创建的生成器,用到了才会计算,不用的话,不计算    
square_generator = (x * x for x in range(50000))
print(type(square_generator))
for i in range(5):
    print(next(square_generator))
 
#生成器的又一个实例:
def fib(limit):
    n, a, b = 0, 0, 1
    while n < limit:
        yield b    #表示每当出现一个next,就会从这里开始循环一次
        a, b = b, a + b
        n += 1
    return 'done'

import traceback
f = fib(5)
print(type(f))   #这里f是一个生成器
print(next(f))   #第一次调用
print(next(f))   #第二次调用
print(next(f))   #第三次调用
print(next(f))   #第四次调用
print(next(f))   #第五次调用
try:
    print(next(f))   #这里再次调用,就已经结束了
except StopIteration:
    traceback.print_exc()
for i in fib(5):
    print(i)
注意:在2.7版本中,range一次,就会生成所有的数值列表,但是3.5版本以后,range一次,不会全部生成,你next一次,就会生成一个,节省了大量的内存。
 

3、迭代器

(1)

 

(2)判断是否可以迭代

from collections import Iterable
from collections import Iterator

#判断是否可以迭代
print(isinstance([1, 2, 3], Iterable))
print(isinstance({}, Iterable))
print(isinstance(123, Iterable))
print(isinstance('abc', Iterable))  #判断是否可以迭代
 
print(isinstance([1, 2, 3], Iterator))  #判断列表是否是迭代器

g = (x * x for x in range(10))  #这是一个生成器,但是否可以迭代呢?
print(type(g))   #返回结果表示是可以迭代的
print(isinstance(g, Iterable))
print(isinstance(g, Iterator))
for i in g:    #如果可以迭代,就可以用for进行调用
    print(i)
#判断下面这个函数(本身是一个生成器),是否是迭代器
def fib(limit):
    n, a, b = 0, 0, 1
    while n < limit:
        yield b
        a, b = b, a + b
        n += 1
    return 'done'

f = fib(6)
print(type(f))
print(isinstance(f, Iterable))
print(isinstance(f, Iterator))
for i in f:    #上面判断,f函数是迭代器,所以可以用for循环
    print(i)
好吧,说白了,判断是否是迭代器,就是为了验证它是否可以用for循环来访问,貌似除了这个作作用,没有其他的作用了



 
### 回答1: Python 是一种强大的计算机编程语言,其中一个重要的应用就是数组计算和曲线绘制。常用的库有 Numpy 和 Matplotlib。Numpy 提供了高效的数组操作,可以帮助我们进行矩阵运算、统计分析等。Matplotlib 则提供了丰富的绘图工具,可以绘制各种图形,如线图、散点图、直方图等。这些工具可以帮助我们对数据进行可视化和分析。 ### 回答2: Python是一种非常优秀的编程语言,尤其是在科学计算和数据处理方面,Python可以帮助我们快速完成许多复杂的计算和分析任务。而在Python编程中,数组计算和曲线绘制也是非常重要的部分,可以帮助程序员更好地进行数据处理和数据可视化。 在Python中,数组计算是一种高效的数据处理方式。Python中的数组可以使用NumPy库来进行操作,NumPy库可以让我们更方便地进行向量和矩阵运算,也可以对整个数组进行快速的计算和处理。基于NumPy库,我们可以快速地进行数组计算,用简短的代码实现各种复杂的数学运算和数据处理任务。 例如,在Python中我们可以使用NumPy库来进行数组的加、减、乘、除等基本运算,也可以进行数组切片、拼接、排序等操作。比如,对于两个数组a和b,我们可以使用以下代码来进行数组的加法运算: ```python import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) c = a + b print(c) # [ 6 8 10 12] ``` 通过这种方式,我们可以快速地进行数组计算,完成复杂的数据处理和分析工作。 除了数组计算,Python中的曲线绘制也是非常重要的技能。Python可以使用Matplotlib库来进行数据可视化,Matplotlib库可以帮助我们快速地绘制各种类型的图表,包括线性图、散点图、饼图、柱状图等等。 例如,我们可以使用Matplotlib库来绘制一条简单的折线图,代码如下: ```python import matplotlib.pyplot as plt x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.show() ``` 通过这种方式,我们就可以快速地绘制出一条正弦波曲线,这对于数据分析以及数据可视化非常有用。 综上所述,Python数组计算和曲线绘制是非常重要的计算思维训练,这不仅可以帮助我们快速地完成数据处理和数据分析任务,还可以帮助我们更好地展示和交流计算结果。希望大家在学习Python的过程中,注重这些计算思维的训练,不断提高自己的编程技能和数据处理能力。 ### 回答3: 计算思维是指在计算机问题解决中的思维方式和方法。Python是一个强大的计算机编程语言,其运用广泛,包括数据科学、Web开发、网络安全、人工智能等多个领域。Python的计算思维训练主要围绕数组计算和曲线绘制展开,这些技能在数据分析和可视化中尤为重要。 数组Python中最基本的数据类型之一,其优点是数据的存储和处理都十分方便。Python中有丰富的数组库,如NumPy、SciPy和pandas等,可以帮助开发者高效地处理大量数据。在数组计算的训练中,开发者需要学会如何使用数组进行各种常见的计算操作,如数组的加减乘除、索引和切片、排序和聚合等,以便在实际工作中可以快速准确地进行数据处理。 曲线绘制是Python中常用的数据可视化技术之一。Matplotlib和Seaborn等库可以帮助开发者绘制各种类型的图表,如折线图、散点图、柱状图、饼图等,这些图表能够直观地展示数据分布、趋势和关系。在曲线绘制的训练中,开发者需要学会如何使用不同的绘图库及其参数,选择合适的图表类型和设置图表风格,使其画出的图表更加美观、直观和有用。 总之,Python的计算思维训练目标在于帮助开发者打造高效处理数据和优秀展示数据的能力。掌握数组计算和曲线绘制的技能不仅可以提高计算机编程的水平,更重要的是可以在数据科学领域中获取更多机会和晋升空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值