| 查看: 444 | 回复: 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 |
» 猜你喜欢
2025年遐想
已经有3人回复
自荐读博
已经有9人回复
投稿Elsevier的杂志(返修),总是在选择OA和subscription界面被踢皮球
已经有8人回复
自然科学基金委宣布启动申请书“瘦身提质”行动
已经有4人回复
求个博导看看
已经有18人回复

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








回复此楼