| 查看: 469 | 回复: 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 |
» 猜你喜欢
情人节自我反思:在爱情中有过遗憾吗?
已经有6人回复
基金正文30页指的是报告正文还是整个申请书
已经有4人回复
今年春晚有几个节目很不错,点赞!
已经有6人回复
球磨粉体时遇到了大的问题,请指教!
已经有15人回复
过年走亲戚时感受到了所开私家车的鄙视链
已经有5人回复
江汉大学解明教授课题组招博士研究生/博士后
已经有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














回复此楼