| 查看: 439 | 回复: 2 | ||
lemon4113捐助贵宾 (初入文坛)
|
[求助]
循环读取文本并赋值给二维列表,出错 已有1人参与
|
|
虽然有现成的bandplot.pl,但还写了个从vasp的OUTCAR给出能带的python,这是其中一部分,希望查找“occupation”,并将其随后的第2到13行中的数据的第二列付给x[k,b],经测试发现,在b循环内x[k,b]正常,但是循环结束后,所有的x[k]都变成了x[100],(如x[k]和x[k-1]的值都是x[100],共101个K点),不知道是哪里的问题。(另,若将k循环改为rang(101),也会出错,)请指教。(由于显示问题x[k,b]表示x【k】【b】) #!/usr/bin/python import sys f = open("OUTCAR" ![]() lines=f.readlines() l=len(lines) i= 0 j= 0 E= 0 x=[[0,]*12]*101 k=-1 while i< l: if 'occupation' in lines: k+=1 for b in range(12): j=i+b+1 x[k,b]=lines[j].split()[1] i+=15 print x[k-1] print x[k] else: i+=1 |
» 猜你喜欢
回收溶剂求助
已经有7人回复
职称评审没过,求安慰
已经有40人回复
硝基苯如何除去
已经有3人回复
A期刊撤稿
已经有4人回复
垃圾破二本职称评审标准
已经有17人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
申请26博士
已经有5人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
求助文献
已经有3人回复

virtualzx
木虫 (著名写手)
- 应助: 263 (大学生)
- 金币: 7161.3
- 红花: 54
- 帖子: 1605
- 在线: 317.6小时
- 虫号: 2069080
- 注册: 2012-10-18
- 性别: GG
- 专业: 理论和计算化学
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
lemon4113: 金币+20, ★★★很有帮助, 非常好 2016-06-28 09:14:33
感谢参与,应助指数 +1
lemon4113: 金币+20, ★★★很有帮助, 非常好 2016-06-28 09:14:33
|
这一行有问题 x=[[0,]*12]*101 你看一下mutable和immutable object的概念。总的来说,你这里定义的根本不是二维数组。x是同一个列表重复101次。因此赋值时所有行都同时变。它们永远都是一样的。 python的list其实是小的子列表的双链表,它可以随意延长,速度不受影响。另外它相当于是一个指针列表,不是数组。没有必要提前分配空间指定大小,只要x=[], 然后用append来增加元素就可以了。 如果非要分配空间,可以用list comprehension x = [0 for i in xrange(101) for j in xrange(12)] 你还有很多用法不大合适的,比如打开文件最好用with结构,读取文件最好不要一下全部读入内存。 |
2楼2016-06-27 23:02:16
lemon4113
捐助贵宾 (初入文坛)
- 应助: 0 (幼儿园)
- 金币: 1441.9
- 散金: 20
- 帖子: 39
- 在线: 20.8小时
- 虫号: 595374
- 注册: 2008-09-08
- 性别: GG
- 专业: 凝聚态物性 II :电子结构

3楼2016-06-28 09:14:26














回复此楼