Python: выбор элемента без замены - PullRequest
8 голосов
/ 06 апреля 2010

Я хотел бы вырезать случайные буквы из строки.

Учитывая s = "howdy"

Я бы хотел выбрать элементы из 's' без замены, но сохранить порядковый номер.

Например

>>> random.sample(s,len(s))
['w', 'h', 'o', 'd', 'y']

близко к тому, что я хочу, но я бы предпочел что-то вроде

[('w', 2), ('h', 0), ('o', 1), ('d ', 3), (' y ', 4)]

с парами букв и индексов.Это важно, потому что одна и та же буква появляется в 's' более одного раза.т.е. "буква", где 't' появляется дважды, но мне нужно отличить первое 't' от второго.

В идеале, на самом деле мне нужно только генерировать / выбирать буквы так, как мне нужно, но скремблировать и вычислятьбуквы сразу (т.е. в списке, как показано выше) в порядке.

Ответы [ 3 ]

17 голосов
/ 06 апреля 2010
>>> random.sample(list(enumerate(a)), 5)
[(1, 'o'), (0, 'h'), (3, 'd'), (2, 'w'), (4, 'y')]
9 голосов
/ 06 апреля 2010

Вы можете просто перечислить список перед выборкой:

>>> random.sample(list(enumerate(l)), 5)
[(1, 'o'), (2, 'w'), (0, 'h'), (3, 'd'), (4, 'y')]
3 голосов
/ 06 апреля 2010

Вероятно, проще сделать что-то вроде этого:

def sample_with_indices(s):
    indices = range(len(s))
    random.shuffle(indices)
    return [(s[i], i) for i in indices]

Это в основном перемешает все индексы для строки, а затем просто возвращает символ с этим индексом. Переход от символа к индексу немного сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...