Python附加范围不能是spli

2024-03-28 20:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试的时候

anylist.append([var[x:y].split()])

我得到了错误

AttributeError: 'list' object has no attribute 'split'

但是

anylist.append([var[x].split()])

很好用。 那么有人能告诉我:我怎样才能在列表中添加一系列变量,同时仍然得到要拆分的项呢?你知道吗

干杯

附言: 这应该被合并到一个循环中

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)附加到列表中的一个列表中,并且应该拆分这些项。 所以第一个循环应该是步骤:x'第二个循环应该遍历一个块中的所有行(即482行)。你知道吗

但是问题出现在上一次的trj中_列表.append'命令,因为我不能拆分,当我在'lines[x:y]'中使用范围时。你知道吗


Tags: in列表forvarstep步骤rangenat
2条回答

我还发现了另一种方法:

for i in range(var):
  anylist.append([var[i].split()])

我认为这也不应该加载太多的内存

问题是,如果你是切片,你会得到一个列表,而不是单个对象。您可以使用简单的列表理解来对列表中的每个对象/字符串进行拆分,不过:

anylist.append([e.split() for e in var[x:y]])

相关问题 更多 >