Python, образец больше, чем население [дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

8
задан Giladiald 31 December 2013 в 20:03
поделиться

2 ответа

Цель из random.sample() состоит в том, чтобы выбрать подмножество входной последовательности случайным образом, не выбирая ни одного элемента более одного раза. Если ваша последовательность ввода не имеет повторений, то и ваш вывод не будет.

Вы не ищете подмножество; вам нужен один случайный выбор из входной последовательности, повторяющийся несколько раз. Элементы могут использоваться несколько раз. Используйте random.choice() в цикле для этого:

for i in range(y):
    string = ''.join([random.choice(x) for _ in range(v)])
    print string

Это создает строку длины v, где символы из x могут использоваться более одного раза.

Быстрая демонстрация:

>>> import string
>>> import random
>>> x = string.letters + string.digits + string.punctuation
>>> v = 20
>>> ''.join([random.choice(x) for _ in range(v)])
'Ms>V\\0Mf|W@R,#/.P~Rv'
>>> ''.join([random.choice(x) for _ in range(v)])
'TsPnvN&qlm#mBj-!~}3W'
>>> ''.join([random.choice(x) for _ in range(v)])
'{:dfE;VhR:=_~O*,QG<f'
11
ответ дан Martijn Pieters 20 August 2018 в 07:01
поделиться
  • 1
    ты гений! вы решили это так быстро, что я даже не могу выбрать ответ, сделаю это через 5 минут. quick quetion tho (вам не нужно отвечать, я знаю его вопрос diff, я просто хочу понять) - делает ли этот пример бесполезным? потому что он делает то же самое, но больше ... – Giladiald 31 December 2013 в 20:13
  • 2
    Нет, sample() имеет другую цель. Представьте себе выбор 4 случайных карт из колоды карт. Вы не можете выбрать одну и ту же карту дважды, вам нужно выбрать 4 уникальные карты из колоды. Это образец. – Martijn Pieters♦ 31 December 2013 в 20:16
  • 3
    Ваше решение правильно, но я считаю неправильным говорить, что образец по определению является подмножеством. Разница заключается в выборке с заменой и без нее (см., Например, Wikipedia ). Кроме того, функция numpy.random.choice имеет возможность выбирать, следует ли выбирать с заменой или без нее, так что это может быть полезно, если вы имеете дело с структурами numpy. – BrenBarn 31 December 2013 в 20:28
  • 4
    @BrenBarn: реализация random.sample() - это очень простая замена без , поскольку random.choice() с циклом упрощает реализацию другого варианта. – Martijn Pieters♦ 31 December 2013 в 20:31
  • 5
    @MartijnPieters: Конечно, и ваше редактирование прояснило ситуацию. Я просто говорю, что есть разница между тем, что делает random.sample и «что образцом по определению является». – BrenBarn 31 December 2013 в 20:33

@Martijn Pieters прав. Но поскольку они указаны в https://docs.python.org/3.4/library/random.html :

Предупреждение. Псевдослучайные генераторы этого модуля не следует использовать в целях безопасности. Используйте os.urandom () или SystemRandom, если вам нужен криптографически безопасный генератор псевдослучайных чисел.

, и целью этого является создание паролей, я предлагаю такой подход:

import string
import random

set = string.letters + string.digits + string.punctuation
length = 20

password = ''.join( [ random.SystemRandom().choice( set) for _ in range( length) ] )

print( password)

Кто-нибудь может подтвердить, что это более безопасно?

2
ответ дан lucas0x7B 20 August 2018 в 07:01
поделиться
  • 1
    или просто random.choice(chars) Я запускаю свою версию этой программы прямо сейчас из любопытства – motoku 20 February 2015 в 01:32
Другие вопросы по тегам:

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