| 查看: 445 | 回复: 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 |
» 猜你喜欢
溴的反应液脱色
已经有4人回复
参与限项
已经有5人回复
推荐一本书
已经有7人回复
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复

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













回复此楼