如果您正在寻找一种更有效的方法来从源中获取每个列表元素中的 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')]
要将列表中的列表压缩在一起,请在元列表名称前使用 * 星号解包运算符。
>>> 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')