random.sample retornar apenas caracteres em vez de strings
-
05-07-2019 - |
Pergunta
Este é um tipo de pergunta novato, mas eu não poderia encontrar uma solução. Eu li uma lista de strings de um arquivo, e tentar obter uma amostra de 5 elemento aleatório com random.sample, mas a lista resultung contém apenas caracteres. Por que é que? Como posso obter uma lista amostra aleatória de cordas?
Isto é o que eu faço:
names = random.sample( open('names.txt').read(), 5 )
print names
Isto dá uma lista de caracteres de cinco elementos como:
['\x91', 'h', 'l', 'n', 's']
Se eu omitir a parte random.sample, e imprimir a lista, ela imprime cada linha do arquivo, que é o comportamento esperado, e prova que o arquivo é lido OK.
Solução
Se os nomes são todos em linhas separadas, ry o seguinte:
names = random.sample(open('names.txt').readlines(), count)
print names
Essencialmente você está indo mal porque você precisa passar um interable para random.sample()
. Quando você passar uma string que trata como uma lista. Se você é nomes estão todos em uma linha, você precisa usar split()
para separá-los e passar essa lista para random.sample()
.