当我尝试
时anylist.append([var[x:y].split()])
我收到错误
AttributeError: 'list' object has no attribute 'split'
但是
anylist.append([var[x].split()])
工作正常。 所以有人可以告诉我:如何将一系列变量附加到我的列表中并仍然可以分割项目?
干杯
PS: 这应该被纳入循环
for j in range(0,z):
所以,对于每一个j,我想要一个不同范围的变量作为一个项目,该项目应该被拆分。
修改 好的,我试着更清楚我的问题,所以最好理解: 我想处理以下格式的文件
480
STEP: 1
Ele x y z
Ele x y z
...
480
STEP: 2
Ele x y z
...
现在,每个块以'480'开头并且长度为480 + 2行(由于块中的前两行,因此为+2)。
我尝试实现的是将每个块'STEP:x'放到我的列表中的一个项目中,并且应该拆分此步骤中的行。 因此列表最终应该像
[
[[ 480],[STEP:1],[Ele, x, y, z],[Ele, x, y, z],...],
[[ 480],[STEP:2],[Ele, x, y, z],[Ele, x, y, z],...],
[[ 480],[STEP:3],...]]
]
以便稍后我可以处理类似
的内容if 3 <= float(anylist[0][3][1] <= 5
... do something...
我要检查,如果在第一个块(步骤:1)中,x值介于3到5之间。
回到我的问题,我想做这样的事情:
trj_list = []
for i in range(0,nsteps):
for j in range(0,nat):
trj_list.append(lines[j*nat:j*nat+nat])
该文件的总长度为nat * nsteps。第一个循环超过nsteps = 2001,第二个循环超过nat = 482。 对于每个j,第二个循环应该将所有行(从0-482)附加到列表中的列表,并且应该拆分项目。 所以第一个循环应该遍历所有'STEP:x',第二个循环应该遍历一个块中的所有行(即482行)。
但问题出现在最后一个'trj_list.append'命令中,因为当我在'lines [x:y]'中使用一个范围时,我无法拆分。
答案 0 :(得分:0)
问题在于,如果您正在切片,则会返回列表而不是单个对象。您可以使用简单的列表推导来对列表中的每个对象/字符串进行拆分:
anylist.append([e.split() for e in var[x:y]])
答案 1 :(得分:0)
我发现了另一种方法:
for i in range(var):
anylist.append([var[i].split()])
我认为这也不应该加载内存