Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环两次附加同一对象_Python_Loops - Fatal编程技术网

Python循环两次附加同一对象

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

我正在关注YouTube视频,并通过添加类来学习Python OOP的所有细节,扩展了“传统”内联方式。基本上,视频中的那个家伙让你抓取芝加哥公交线路,解析它,然后通过比较lat、long、time、distace等找到他朋友把手提箱放在哪辆车上

我正在使用的XML文件有一系列值,如下所示:

<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')
我遇到的障碍在上面的第二个
循环中。在第一个循环中,输出告诉我一切正常。第二个输出相同的值两次。它让我想起了Javascript
for()
循环的行为,在没有闭包的情况下,只对最后一个值进行操作。我的控制台输出如下:

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