Python循环两次附加同一对象
我正在关注YouTube视频,并通过添加类来学习Python OOP的所有细节,扩展了“传统”内联方式。基本上,视频中的那个家伙让你抓取芝加哥公交线路,解析它,然后通过比较lat、long、time、distace等找到他朋友把手提箱放在哪辆车上 我正在使用的XML文件有一系列值,如下所示:Python循环两次附加同一对象,python,loops,Python,Loops,我正在关注YouTube视频,并通过添加类来学习Python OOP的所有细节,扩展了“传统”内联方式。基本上,视频中的那个家伙让你抓取芝加哥公交线路,解析它,然后通过比较lat、long、time、distace等找到他朋友把手提箱放在哪辆车上 我正在使用的XML文件有一系列值,如下所示: <bus> <id>1867</id> <rt>22</rt> <d>North Bound</d&g
<bus>
<id>1867</id>
<rt>22</rt>
<d>North Bound</d>
<dd>Northbound</dd>
<dn>N</dn>
<lat>41.89167051315307</lat>
<lon>-87.6297836303711</lon>
<pid>5421</pid>
<pd>Northbound</pd>
<run>P258</run>
<fs>Howard</fs>
<op>30090</op>
<dip>8858</dip>
<bid>7323012</bid>
<wid1>0P</wid1>
<wid2>258</wid2>
</bus>
在“main”文件中,我循环遍历这些值,并根据lat
节点的文本值添加匹配项:
# __getRouteData() is the url open and write function, works fine.
# parser is the xml.etree.ElementTree parse class
if self.__getRouteData() == True:
xmlParser = parser(self.__xmlFile)
busses = xmlParser.getnodes()
matches = []
# loop over all
for busTree in busses:
bus = Bus(busTree)
if float(bus.get('lat')) > self.__lat:
matches.append(bus)
print 'appending', bus.get('id')
for bus in matches:
print bus.get('id')
我遇到的障碍在上面的第二个循环中。在第一个循环中,输出告诉我一切正常。第二个输出相同的值两次。它让我想起了Javascriptfor()
循环的行为,在没有闭包的情况下,只对最后一个值进行操作。我的控制台输出如下:
appending 1784
appending 4057
4057
4057
看。。。它告诉我它将唯一总线附加到我的匹配列表中,但是当我迭代匹配列表时,它只给我一条总线
另一个片段告诉我第二个循环有些古怪:
print 'Matches', matches
for bus in matches:
print bus.get('id')
# Matches [<busutils.Bus instance at 0xb6f92b8c>, <busutils.Bus instance at 0xb6f92d0c>]
# 4057
# 4057
打印“匹配项”,匹配项
对于匹配中的总线:
打印总线。获取('id'))
#匹配[,]
# 4057
# 4057
列表的输出向我显示了列表中对象的不同散列(…对吗?),因此表示它们是两个不同的对象,因此具有不同的数据,但是循环没有很好地运行
很明显,我刚刚开始接触python,但有Java、Javascript、PHP等方面的经验,所以我不确定这些简单循环中缺少了什么
谢谢 这是因为您在总线类上使用了类变量。使它们成为实例变量(在初始化中创建)。这是因为您在总线上使用了类变量。让它们成为实例变量(在\uuuu init\uuuu
中创建)。@g.d.d.c让它成为一个答案:d删除它。谢谢是的,回答我就给你绿色支票!我想我习惯于在类声明之后声明变量作为实例变量。这个self
的东西还需要一些时间来适应。谢谢
print 'Matches', matches
for bus in matches:
print bus.get('id')
# Matches [<busutils.Bus instance at 0xb6f92b8c>, <busutils.Bus instance at 0xb6f92d0c>]
# 4057
# 4057