zoukankan      html  css  js  c++  java
  • Python的itertools.product 方法

    itertools.product:类似于求多个可迭代对象的笛卡尔积。

    使用的形式是:

    itertools.product(*iterables, repeat=1),

    product(X, repeat=3)等价于product(X, X, X)。

    1. 直接使用时:分别生成元组,然后合成一个list

    import itertools
    aa = itertools.product(['西藏','瀑布','湖水'], ['月色','星空'])
    bb = list(aa)   #按照顺序生成笛卡尔积,repeat默认是1
    print(bb)

    2. 假设设置:repeat=3

    random_list = list(itertools.product(['西藏','瀑布','湖水'], ['月色','星空'], repeat=3))
    print(random_list)  #此list长度为216

    为什么会是216呢?

    首先,在不设置 repeat 参数的时候,默认是1,生成的list长度时6 —— 这可以用数学的排列组合来表示,从第一个参数 ['西藏','瀑布','湖水'] 取出一个值,有3种可能;从第二个参数 ['月色','星空'] 取出一个值,有2种可能;故 3*2=6种结果。

    然后,当设置 repeat=3 时,也就是说将 repeat=1(默认)的结果再重复2次后(也就是最后一共有3套一样的第一层结果)再进行排列组合,从第一个结果(6种结果)取出一个元素的可能有6种,同理,从第二第三个重复结果中取出一个元素的可能各有6种,于是它们的组合就有6*6*6=216种。

     当然,也是先合成一个元组再组成list的。

    3. 所以也能理解下面的结果是27种了吧

    random_list = list(itertools.product(['西藏','瀑布','湖水'], repeat=3))
    print(random_list)

    因为第一层结果是3种可能;执行该操作3次,就形成了第一层的3套一样的结果(每个结果各有3种可能),然后再排列组合就是 3*3*3=27种结果。

    4. 如果要从列表中随机取出几个不重复的元素的话(原来的列表本身元素不重复),可用 random.sample 方法。

    import random
    random.seed(1)   #设置随机数种子,可用来检测相同的随机数得到的结果是否一致
    
    n = 2
    aa = random.sample(random_list, n)   #随机列表中的n个元素
    print(aa)

    也就是从上述27种结果中,随机取出2种,得到:

    5. 此方法可以用于生成随机的坐标,另一种生成随机坐标的方法:https://www.cnblogs.com/qi-yuan-008/p/12564710.html

    random_list = list(itertools.product(range(1,4), range(1,2)))
    print(random_list)
    
    n = 2
    aa = random.sample(random_list, n)   #随机列表中的n个元素
    print(aa)

    参考:

    https://segmentfault.com/q/1010000007715239?_ea=1447720

    https://www.cnblogs.com/xxxxxxxxx/p/11544432.html

  • 相关阅读:
    .NET Core CSharp初级篇 1-1 基础类型介绍
    ASP.NET Core 基于JWT的认证(二)
    ASP.NET Core 基于JWT的认证(一)
    HOJ 1096 Divided Product (DFS)
    HDU1698 Just a Hook (区间更新)
    独立写作(A or B)
    HDU1394 Minimum Inversion Number(线段树OR归并排序)
    HDU5441 Travel (离线操作+并查集)
    学生管理系统(list)
    HDU5437 Alisha’s Party (优先队列 + 模拟)
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12577249.html
Copyright © 2011-2022 走看看