Если вы ищете более эффективный способ получить случайно упорядоченный список из 4 элементов списка из источников, попробуйте random.shuffle(list)
:
>>> import random
>>> random.seed()
>>> sources = ['Prone', 'Supine', 'Halfway', 'HalfInv']
>>> copy1 = sources * 4
>>> copy2 = sources * 4
>>> copy1 == copy2
True
>>> random.shuffle(copy1)
>>> random.shuffle(copy2)
>>> copy1 == copy2
False
>>> copy1
['HalfInv', 'Prone', 'Halfway', 'Supine', 'Prone', 'Halfway', 'Prone', 'Supine', 'Prone', 'HalfInv', 'HalfInv', 'Halfway', 'Supine', 'Halfway', 'HalfInv', 'Supine']
>>> copy2
['Prone', 'Halfway', 'Prone', 'Prone', 'HalfInv', 'Halfway', 'Halfway', 'HalfInv', 'Supine', 'HalfInv', 'Halfway', 'Supine', 'Prone', 'Supine', 'HalfInv', 'Supine']
Далее, вы хотите создать и назвать списки на основе счетчика циклов ... Я бы рекомендовал против этого. Вместо этого просто добавляйте свои случайные списки в список по одному, и вы можете индексировать их в порядке добавления.
>>> n = 2 # number of random lists you want
>>> rand_lists = [] # A list for holding your randomly generated lists
>>> for i in range(n):
sources_copy = sources * 4
random.shuffle(sources_copy)
rand_lists.append(sources_copy)
Но это все еще оставляет вас с проблемой, что ваши данные находятся в двух отдельных списках. Чтобы исправить это, вы хотите функцию zip()
. Он объединяет каждый элемент в списке 1 со своим соответствующим индексированным элементом в списке 2, образуя кортеж для каждого индекса. Это может быть сделано с произвольным числом последовательностей.
>>> list1 = [1,2,3,4,5]
>>> list2 = ['a','b','c','d','e']
>>> zip(list1, list2)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
Чтобы сжать ваши списки в списке, используйте оператор *
star unpacking перед именем вашего мета-списка.
>>> my_data = zip(*rand_lists)
Теперь вы хотите вывести в CSV-файл; достаточно просто написать свою собственную функцию CSV. Помните, что разделители столбцов имеют запятые, разделители строк - это новые строки.
def out_csv(mydata, filename):
with open(filename, 'w') as out_handle:
for line in mydata:
out_handle.write(','.join(line) + '\n')
Отсюда просто передайте комбо вашего сжатого списка в функцию out_csv и убедитесь, что ваше имя файла имеет расширение .csv
. Excel может изначально читать файлы .csv
, поэтому вам не нужно выполнять копирование.
Вот последний шаг:
>>> out_csv(my_data, 'my_name.csv')