如何将我的列表导出到Excel兼容文件?

今天,根据我在这里得到的答案,我写了这个小代码来创build一个16个元素的随机列表。

import random sources = ['Prone', 'Supine', 'Halfway', 'HalfInv'] result = [random.choice(sources)] repeats = 0 fail = 0 while len(result) < 16: elem = random.choice(sources) repeats = result.count(elem) print(repeats) if (elem != result[-1]) & (repeats < 4): result.append(elem) else: fail = fail + 1 print(fail) if fail > 100: result = [random.choice(sources)] print(result) 

现在我想要做的是:1.创build2个随机列表命名他们不同(我怎么做这个基于for循环计数器?)2.把这两个列表作为列在制表符分隔(txt)文件,一个接一个为了方便复制粘贴到一个Excel文件中。 我看着csv模块,但它似乎只有行的方法。

如果您正在寻找一种更有效的方法来从源中获取每个列表元素的4个随机sorting列表,请尝试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'] 

接下来,你想根据循环计数器生成和命名列表…我build议不要这样做。 相反,只需将您的随机列表附加到列表中,然后按照附加顺序将它们编入索引。

 >>> 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') 

像这样的东西应该可以工作:(我把你的程序稍微调整了2个列表,但试图保持一般的“要点”一样)

 import random sources = ['Prone', 'Supine', 'Halfway', 'HalfInv'] #result = [random.choice(sources)] result = {1:[], 2:[]} #repeats = 0 #fail = 0 for part in result: fail = 0 repeats = 0 while len(result[part]) < 16: elem = random.choice(sources) repeats = result[part].count(elem) print(repeats) if (not result[part]) or ((elem != result[part][-1]) & (repeats < 4)): result[part].append(elem) else: fail = fail + 1 print(fail) if fail > 100: result[part] = [] print(result) with open('somefile.csv','wb') as f: #f.write('\r\n'.join('%s\t%s' % (a,b) for a, b in zip(result[1], result[2]))) f.write(bytes('\r\n'.join('%s\t%s' % (a,b) for a, b in zip(result[1], result[2])), 'UTF-8'))