Генерация перестановок с повторениями

Вам необходимо использовать vue.js вычисленные свойства

new Vue({
  name: 'Problem',
  data: function () {
    return {
      num: math.randomInt(1,35)
    }
  },
  watch: {
    num: function () {
      console.log("Data changed");
      this.renderMath();
    }
  },
  computed: {
     square: function () {
        return this.num**2;
     }
  },
  created: function () {
    console.log("Hello This is created!");
    this.renderMath();
  },
  beforeMount: function () {
    console.log("This is beforeMount");
  },
  mounted: function () {
    console.log("This is mounted!");
  },
  beforeUpdate: function () {
    console.log("This is beforeUpdate");
    //this.renderMath();
  },
  methods: {
    addOne: function() {
      this.num++
    },
    randomInt: function () {
      this.num = math.randomInt(1,35)
    },
    renderMath: function (event) {
      this.$nextTick(function(){
        MathLive.renderMathInElement("math");
      })
    }
  }
}).$mount("#app")



${{num}}^2 = {{square}}$

69
задан Georgy 9 August 2019 в 10:28
поделиться

4 ответа

Вы ищете декартово произведение .

В математике декартово произведение (или набор произведений) - это прямое произведение двух множеств.

В вашем случае это будет {1, 2, 3, 4, 5, 6} x {1, 2, 3, 4, 5, 6} . itertools может помочь вам в этом:

import itertools
x = [1, 2, 3, 4, 5, 6]
[p for p in itertools.product(x, repeat=2)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), 
 (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), 
 (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), 
 (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

Чтобы получить случайный бросок кубиков ( совершенно неэффективным способом ):

import random
random.choice([p for p in itertools.product(x, repeat=2)])
(6, 3)
118
ответ дан 24 November 2019 в 13:45
поделиться

В этом случае понимание списка не особенно необходимо.

, Учитывая [1 118]

import itertools as it


iter_ = range(1, 7)
r = 2

Код

list(it.product(iter_, repeat=r))
<час>

Детали

Неочевидно, Декартово произведение может генерировать подмножества перестановок. Однако из этого следует, что:

  • с заменой: можно произвести все перестановки n ** r через product
  • без замены: можно отфильтровать от последнего

Перестановки с заменой, n ** перестановки r

[x for x in it.product(iter_, repeat=r)]

без замены, n!

[x for x in it.product(iter_, repeat=r) if len(set(x)) == r]

# Equivalent
list(it.permutations(iter_, r))  
1
ответ дан 24 November 2019 в 13:45
поделиться

В python 2.7 и 3.1 есть itertools.combinations_with_replacement функция:

>>> list(itertools.combinations_with_replacement([1, 2, 3, 4, 5, 6], 2))
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 2), (2, 3), (2, 4), 
 (2, 5), (2, 6), (3, 3), (3, 4), (3, 5), (3, 6), (4, 4), (4, 5), (4, 6),
 (5, 5), (5, 6), (6, 6)]
6
ответ дан 24 November 2019 в 13:45
поделиться

Вам не нужны перестановки - вам нужно декартово произведение . Для этого используйте продукт из itertools:

from itertools import product
for roll in product([1, 2, 3, 4, 5, 6], repeat = 2):
    print(roll)
28
ответ дан 24 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: