生态学实验被拉到荒地去认植物(笑),最后要画一个将样方打乱,随机抽取然后统计样方面积与物种总数的关系(理论上是符合一个幂函数的关系)。然后突发奇想快速码出:
import xlrd
import xlwt
import random
from xlutils.copy import copy
def write_bank(text):
bank = []
all_sentence = text.split("\n",-1)
for sentence in all_sentence:
line = sentence.split(",",-1)
#print(line)
bank.append(line)
return bank
def single_random_sort(bank):
out_list = {}
delete_group = []
bank_0 = bank.copy()
cycle_number = 0
for j in range(len(bank)):
random.shuffle(bank_0)
group_element = bank_0[0]
cycle_count = 0
for i in group_element:
if i in delete_group:
continue
else:
cycle_count += 1
cycle_number += cycle_count
out_list[j+1] = cycle_number
#print(j)
bank_0.remove(group_element)
delete_group += group_element
return out_list
def write_out(out_list,number,bank,table):
for i in range(len(bank)):
#table.write(i,3*number,i+1)
table.write(number,i,out_list[i+1])
def main():
with open("1.txt","r",encoding='UTF-8') as file_object:
text = file_object.read()
cishu = int(input("输入模拟次数:"))
bank = write_bank(text)
oldbook = xlrd.open_workbook(filename="1.xls")
newbook = copy(oldbook)
table = newbook.get_sheet(0)
for cycle in range(cishu):
out_list = single_random_sort(bank)
print(out_list)
write_out(out_list,cycle,bank,table)
print("done cycle",cycle+1)
newbook.save('2.xls')
main()
print("All Done")
样本是这样(命名为了1.txt,每一行代表一个样方):
一年蓬,多苞斑种草,小苦荬,艾蒿,中华草沙蚕,高羊茅
一年蓬,小苦荬,艾蒿,高羊茅,北美独行菜,黄花婆罗参
一年蓬,小苦荬,艾蒿,高羊茅,黄花婆罗参,山莴苣,小酸模,泥胡菜,菊苣,米口袋,假还阳参
一年蓬,北美独行菜,泥胡菜,野老鹤草,朝天委陵菜,荻,附地菜
一年蓬,小苦荬,高羊茅,皱叶酸模
一年蓬,小苦荬,高羊茅,山莴苣,假还阳参,紫苜蓿
小苦荬,艾蒿,高羊茅,泥胡菜
小苦荬,艾蒿,高羊茅,泥胡菜
一年蓬,白茅,小苦荬,泥胡菜
艾蒿,高羊茅,山莴苣,紫苜蓿
小苦荬,山莴苣,高羊茅,泥胡菜,菊苣
小苦荬,高羊茅,山莴苣,中华草沙蚕
小苦荬,泥胡菜,一年蓬,中华草沙蚕,北美独行菜
一年蓬,多苞斑种草,小苦荬,艾蒿,中华草沙蚕,高羊茅,白车轴草
一年蓬,小苦荬,高羊茅,中华草沙蚕,山莴苣,小酸模,北美独行菜,假还阳参
小苦荬,艾蒿,高羊茅,中华草沙蚕,米口袋,小酸模,皱叶酸模,假还阳参
假还阳参,一年蓬,高羊茅,丝路蓟,小苦荬,中华草沙蚕,紫花地丁,山莴苣
白茅,高羊茅,中华草沙蚕,小苦荬,假还阳参,一年蓬
高羊茅,北美独行菜,附地菜,泥胡菜,小苦荬,中华草沙蚕
山莴苣,高羊茅,小苦荬,中华草沙蚕,附地菜,北美独行菜,一年蓬
一年蓬,白茅,高羊茅,假还阳参,中华草沙蚕,多苞斑种草,小苦荬
艾蒿,高羊茅,北美独行菜,假还阳参,小苦荬,一年蓬,中华草沙蚕
一年蓬,中华草沙蚕,高羊茅,假还阳参
女娄菜,多苞斑种草,艾蒿,小苦荬,假还阳参,高羊茅
小苦荬,多苞斑种草,月见草,泥胡菜,中华草沙蚕,高羊茅
程序最后输出的是每一次迭代下每个面积对应的物种数,所以还得你自己在Excel里面平均一下(懒得吧平均写到码里了)。最后图还挺漂亮的(稍微变换成了对数的).