我遇到了这种最意外的行为,我似乎无法解释。我编写了一个Python函数,将PDB文件(蛋白质结构的原子坐标)解析为列表列表,例如:
[
['ATOM ', ' 1700', ' N ', ' ', 'VAL', ' B', ' 11', ' ', ' ', matrix([[-19.164, -27.781, -11.31 ]]), ' 1.00', ' 18.57', ' ', ' ', ' N', ' '],
...
]
当我如下遍历列表时:
for line in pdb[:50]:
print line, len(line), type(line)
我按预期方式获得了每个元素,每个列表中都有16个元素。
但是,如果我运行以下命令:
for line in pdb:
print line, len(line), type(line)
第6行(编号为0)是一串value ' 311'
。如果我使用enumerate()
遍历,也会发生这种情况pdub
。如果我使用手动提取此元素pdb[6]
,则它是一个包含16个元素的普通列表,并且该值' 311'
在此列表中无处显示。
这对我来说绝对没有任何意义!
注意:仅在Python3.X中为true
for i in l[1:]
(或for i in list(l)
,只要切片不是惰性的)和for i in l
ifl
是生成器之间的主要区别是,第一个将把整个生成器处理到一个列表中,然后将其发送给for
,而第二个将l
在处处理一个生成器中的一个元素。时间:
from time import sleep
from multiprocessing import Pool
from random import randint
class Gen:
def __init__(self, limit):
self.__l = limit
self.__t = []
self.__v = 0
def __iter__(self):
return self
def __next__(self):
self.__v += 1
if self.__v +1 >= self.__l:
raise StopIteration
print("NEXT:{}".format(self.__v))
sleep(0.01)
w = 0
self.__t.append(self.__v)
return self.__t[:]
r = Gen(1000)
所以
for i in r:
sleep(0.2)
print("--->R:{}".format(i[-1]))
>>> NEXT:1
--->R:1
NEXT:2
--->R:2
NEXT:3
--->R:3
NEXT:4
--->R:4
NEXT:5
...
和
for i in list(r):
sleep(0.2)
print("--->R:{}".format(i[0]))
>>> NEXT:1
NEXT:2
NEXT:3
NEXT:4
NEXT:5
...
--->R:1
--->R:2
--->R:3
--->R:4
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句