24小时热门版块排行榜    

Znn3bq.jpeg
查看: 491  |  回复: 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
回复此楼

» 猜你喜欢

vasp薄膜
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

virtualzx

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lemon4113

捐助贵宾 (初入文坛)

引用回帖:
2楼: Originally posted by virtualzx at 2016-06-27 23:02:16
这一行有问题
x=*101

你看一下mutable和immutable object的概念。总的来说,你这里定义的根本不是二维数组。x是同一个列表重复101次。因此赋值时所有行都同时变。它们永远都是一样的。

python的list其实是小 ...

谢谢virtualzx的回复,指出了我的错误,并给出响应建议,同时还使我了解了一些对我而言的新东西,受教了。正在尝试修改。
vasp薄膜
3楼2016-06-28 09:14:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lemon4113 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料工程085601,270求调剂 +28 @ASDF1234 2026-04-08 30/1500 2026-04-10 19:28 by dick_runner
[考研] 一志愿211,化学学硕,310分,本科重点双非,求调剂 +19 努力奋斗112 2026-04-04 20/1000 2026-04-10 12:15 by pengliang8036
[考研] 求调剂 +9 翩翩一书生 2026-04-09 9/450 2026-04-10 11:43 by wp06
[考研] 296求调剂 +6 汪!?! 2026-04-08 6/300 2026-04-10 11:02 by mattzhming
[考研] 调剂申请086000一志愿西北农林科技大学生物与医药320分-本科齐鲁工业大学 +3 美美女士 2026-04-09 3/150 2026-04-10 10:31 by liuhuiying09
[考研] 289求调剂 +4 L1ttleTiger 2026-04-04 4/200 2026-04-09 19:53 by xiayizhi
[考研] 269求调剂 +7 跪求收留。 2026-04-04 7/350 2026-04-09 19:06 by 探123
[考研] 求调剂希望还是希望在山河四省附近 +3 快乐的小白鸽 2026-04-05 3/150 2026-04-09 17:36 by wp06
[考研] 本科郑州大学,一志愿华东师范大学282求调剂 +23 熊哥xtk 2026-04-07 26/1300 2026-04-09 17:17 by 18446523
[考研] 材料调剂 +10 18815505510 2026-04-09 11/550 2026-04-09 17:07 by 544594351
[考研] 085600材料与化工专硕329 求调剂 +24 额cc 2026-04-06 25/1250 2026-04-09 16:01 by wp06
[考研] 262求调剂 +10 天下第一文 2026-04-04 13/650 2026-04-09 15:16 by 探123
[考研] 281求调剂 +10 椰子蘑菇 2026-04-06 10/500 2026-04-08 11:43 by zzucheup
[考研] 求调剂 一志愿西南交通大学085701环境工程 282分 +15 多多爱吃汉堡 2026-04-04 16/800 2026-04-08 11:39 by i_cooler
[考研] 265求调剂 +19 小木虫085600 2026-04-06 21/1050 2026-04-08 10:38 by 逆水乘风
[考研] 323求调剂 +3 林zlu 2026-04-07 4/200 2026-04-07 23:21 by lbsjt
[考研] 308求调剂 +3 终不似从前 2026-04-05 3/150 2026-04-05 22:23 by hemengdong
[考研] 调剂 +8 熊二想上岸 2026-04-04 8/400 2026-04-05 05:27 by houyaoxu
[考研] 290求调剂 +7 luoziheng 2026-04-04 7/350 2026-04-04 23:17 by lqwchd
[考研] 能动调剂326专硕 +4 wan112233 2026-04-04 4/200 2026-04-04 22:47 by yu221
信息提示
请填处理意见