60D4 – list 和 tumple 的 13 个经典使用案例

10. 元素对

  • t[:-1] :原列表切掉最后一个元素
  • t[1:] :原列表切掉第一个元素
  • zip(iter1, iter2) :实现 iter1 和 iter2 的对应索引处的元素拼接
In [32]: list(zip([1,2],[2,3]))
Out[32]: [(1, 2), (2, 3)]

理解上面,元素组对的实现就不难理解:

In [28]: def pair(t):
    ...:     return list(zip(t[:-1],t[1:])) # 生成相邻元素对

调用 pair:

In [29]: pair([1,2,3])
Out[29]: [(1, 2), (2, 3)]

In [30]: pair(range(10))
Out[30]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

11. 样本抽样

内置 random 模块中,有一个 sample 函数,实现“抽样”功能。

下面例子从 100 个样本中,随机抽样 10 个。

  • 首先,使用列表生成式,创建长度为 100 的列表 lst;
  • 然后,sample 抽样 10 个样本。
In [33]: from random import randint,sample
    ...: lst = [randint(0,50) for _ in range(100)] # randint 生成随机整数;
    ...: print(lst[:5])
    ...: lst_sample = sample(lst,10) # sample 从 lst 中抽样 10 个元素
    ...: print(lst_sample)
[0, 38, 31, 33, 43]
[9, 43, 31, 22, 31, 30, 14, 47, 14, 1]

12. 重洗数据集

内置 random 中的 shuffle 函数,能冲洗数据。

值得注意,shuffle 是对输入列表就地(in place)洗牌,节省存储空间。

In [34]: from random import shuffle
    ...: lst = [randint(0,50) for _ in range(100)]
    ...: shuffle(lst) # 重洗数据
    ...: print(lst[:5]) 
[22, 49, 34, 9, 38]

13. 生成满足均匀分布的坐标点

random 模块,uniform(a,b) 生成 [a,b) 内的一个随机数。

如下,借助列表生成式,生成 100 个均匀分布的坐标点。

from random import uniform
 x, y = [i for i in range(100)], [
        round(uniform(0, 10), 2) for _ in range(100)]
print(y)

[3.09, 9.02, 1.87, 1.43, 4.25, 9.66, 9.11, 0.12, 3.3, 2.35, 0.15, 0.34, 6.47, 9.47, 8.63, 8.41, 6.02, 2.87, 5.93, 2.29, 8.61, 4.71, 6.87, 7.42, 0.53, 3.04, 6.02, 7.51, 0.3, 0.27, 6.6, 7.48, 9.96, 8.05, 0.09, 1.07, 6.77, 6.98, 5.96, 2.1, 0.32, 9.12, 2.11, 0.45, 9.74, 3.33, 9.72, 8.4, 0.77, 9.75, 4.61, 5.37, 1.59, 7.8, 0.88, 1.2, 8.21, 8.06, 8.97, 2.02, 8.32, 8.56, 5.74, 5.03, 0.65, 5.84, 3.67, 5.38, 8.13, 2.0, 0.75, 1.92, 5.27, 0.65, 8.29, 9.28, 3.28, 3.6, 1.76, 4.44, 1.15, 9.89, 1.65, 6.75, 0.62, 4.97, 7.03, 6.48, 8.14, 1.8, 7.41, 7.06, 3.73, 5.37, 7.17, 6.94, 3.13, 0.29, 4.36, 6.17]

使用 PyEcharts 绘图,版本 1.6.2 。
注意,运行以下代码至少保证版本要在 1.0 以上:

from pyecharts.charts import Scatter
import pyecharts.options as opts
from random import uniform

def draw_uniform_points():
    x, y = [i for i in range(100)], [
        round(uniform(0, 10), 2) for _ in range(100)]
    print(y)
    c = (
        Scatter()
        .add_xaxis(x)
        .add_yaxis('y', y)
    )
    c.render()


draw_uniform_points()

得到结果如下,变量 y 取值满足均匀分布。

执行程序,会在 py 文件所在目录生成一个 HTML 文件,打开会查看到坐标图。

页面: 1 2 3 4 5 6

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注