Перемешайте каждую строку в файле на определенное количество (контроль степени случайности), используя Python - PullRequest
0 голосов
/ 07 мая 2020

У меня есть файл (test.txt), который содержит номер в каждой строке.

1
2
3
4
5
6
etc.

Я хочу иметь возможность перетасовать каждую строку вокруг файла, но только в определенных границах, т.е. перетасовать каждую строку ± 1 или перемешайте каждую строку ± 5. По сути, я хочу иметь возможность контролировать степень перетасовки с конечной целью - несколько разных выходов, некоторые из которых лишь незначительно отклоняются от исходного файла (каждая строка находится примерно в одном и том же положении), в то время как другие сильно различаются (каждый

Например,

2
1
3
5
4
6
etc.

на одном конце и:

6
3
1
5
2
4
etc.

на другом.

Я видел множество вопросов о прямом случайном перемешивании каждой строки, но я не смог найти ничего о возможности контролировать степень «случайности».

1 Ответ

0 голосов
/ 07 мая 2020

Может это? Его сложно протестировать без чего-либо, чтобы запустить его:

# read the linesinfile list, but store a mini list with the original positions of lines (index) and original line (value)
x = [[index, value] for index, value in enumerate(linesinfile)]
# use the random library
import random
# make a new list from x, but subtract or add a random number between -5 and +5 to the index values (this will be used to reorder the lines in file)
y = [[i[0] +  random.randrange(-5, 5, 1), i[1]] for i in x]
# sort the list, y, by the new index values
# as the index is an integer, there could be clashes (duplicates in index value)
# either fix those by converting to float or use a float random number to start with, or just let the list sort as python defaults to
y.sort(key=lambda x: x[1])
#print the original lines in the new order. 
for k in y:
    print(k[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...