我遇到过这种最令人意想不到的行为,我似乎无法解释。我编写了一个Python函数来解析PDB文件(蛋白质结构的原子坐标)和列表列表,例如:
.schedules--show .event__date {
display: block;
}
.schedules--index .event__date {
display: none;
}
当我按如下方式遍历列表时:
[
['ATOM ', ' 1700', ' N ', ' ', 'VAL', ' B', ' 11', ' ', ' ', matrix([[-19.164, -27.781, -11.31 ]]), ' 1.00', ' 18.57', ' ', ' ', ' N', ' '],
...
]
我按预期得到每个元素,每个列表中有16个元素。
但是,如果我运行以下内容:
for line in pdb[:50]:
print line, len(line), type(line)
第6行(编号为0)是一个值为for line in pdb:
print line, len(line), type(line)
的字符串。如果我使用' 311'
迭代enumerate()
,也会发生这种情况。如果我使用pdub
手动提取此元素,则它是一个包含16个元素的普通列表,值pdb[6]
无法在此列表中显示。
这对我来说绝对毫无意义!
答案 0 :(得分:0)
注意:仅在Python3.X
中为true for i in l[1:]
(或for i in list(l)
,只要切片不是懒惰)和for i in l
之间的主要区别是l
是生成器,第一个将处理将整个生成器放入一个列表,然后将其发送到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
...